Интересно, что ни один из ответов на этой странице не упоминает два крайних случая, надеюсь, никто не возражает, если я их добавлю:
Родовые словари в .NET не являются потокобезопасными, а иногда могут бросать NullReference
или даже (чаще) a KeyNotFoundException
при попытке получить доступ к ключу из двух параллельных потоков. Исключение в этом случае является довольно ошибочным.
Если код NullReferenceException
задан кодом unsafe
, вы можете посмотреть на переменные указателя , и проверьте их на IntPtr.Zero
или что-то в этом роде. Это одно и то же («исключение нулевого указателя»), но в небезопасном коде переменные часто переводятся в типы значений / массивы и т. Д., И вы ударяете головой о стену, задаваясь вопросом, как тип значения может исключение.
(Еще одна причина для небезопасного использования небезопасного кода, если вам это нужно)
Для этого вы можете использовать эмулятор. Взгляните на эту страницу: Android Emulator . Обратите внимание на следующие два аргумента:
-netdelay <delay>
Установите эмуляцию латентности сети на. Значение по умолчанию - нет. См. Таблицу в эмуляции сетевой задержки для поддерживаемых значений. -netspeed <speed>
Установите эмуляцию сетевой скорости в. Значение по умолчанию заполнено. См. Таблицу в эмуляции сетевой скорости для поддерживаемых значений. Go Run> Запустите конфигурацию, выберите приложение Android и перейдите на вкладку Target. Делайте изменения, как показано на рисунке.
[/g1]
Facebook построил нечто, называемое Расширенное управление трафиком . Краткий обзор с их страницы GitHub:
Расширенное управление трафиком (ATC) - это инструмент для моделирования условий сети. Он позволяет управлять подключением устройства к Интернету. Разработчики могут использовать ATC для тестирования своего приложения в разных условиях сети, легко подражая высокоскоростным, мобильным и даже сильно поврежденным сетям. Аспекты подключения, которые можно контролировать, включают в себя:
- полоса пропускания
- латентность
- потеря пакетов
- поврежденные пакеты
- заказы пакетов
Чтобы иметь возможность формировать сетевой трафик, ATC должен работать на устройстве, которое направляет трафик и видит реальный IP-адрес устройства, например например, ваш сетевой шлюз. Это также позволяет любым устройствам, проходящим через ATC, иметь возможность формировать свой трафик. Трафик может быть сформирован / не изменен с помощью веб-интерфейса, позволяющего любым устройствам с веб-браузером использовать ATC без необходимости в клиентском приложении.
blockquote>Вы можете найти его здесь, в GitHub: https://github.com/facebook/augmented-traffic-control
Они также написали сообщение в блоге об этом: https://code.facebook.com/posts / 1561127100804165 / дополненного-трафик контрольно-а-инструмент-к-Simulate-сеть-условие / [/ д2]
, предложенный @VicVu Charles (или любым другим прокси-инструментом), - это более простой способ. Но я хотел бы добавить, что вы можете сделать это и с вашим устройством, а не только с genymotion или другими эмуляторами. Процесс будет таким же:
Измените настройку wifi вашего устройства / эмулятора для использования ручного прокси. И затем установите имя прокси-сервера & amp; порт a. задайте имя хоста как ip вашей системы (получите ip вашего компьютера / mac с помощью ifconfig / ifconfig). b. установите номер порта genymotion (проверьте настройки прокси-сервера в charles)
PS: ваше устройство / эмулятор ДОЛЖНО использовать один и тот же Wi-Fi, поскольку используемый вами ip скорее всего будет частным ip.
У меня есть одна стратегия для решения вашей проблемы. Вы можете использовать приложение прокси для изменения или контроля вашего сетевого статуса. например, Чарльз.
Вы должны изменить конфигурацию по умолчанию в Charles, как показано на следующем рисунке.
И, наконец, вы обнаружите, что чистый статус был сформирован в более низкий темп.
Убедитесь, что ваш код изменен в приложении, который устанавливает время ожидания для вашего запроса и обрабатывает это.
Вы пробовали это? Настройки - Сети - Дополнительно - Мобильные сети - Сетевой режим - Выберите предпочтительную сеть (например, 2G).
Другой метод, который я использовал, упоминался выше. Подключитесь через iPhone. Надеюсь, это поможет.
Обновление для Android Studio версии 1.5 или выше Как @LouMorda упомянула в комментарии ниже, что вкладка Emulator
, упомянутая в оригинальной записи, была удалена в Android Studio v 1.5.
Теперь они установили эти настройки в настройках симулятора в AVD Manager
. Для доступа к этим настройкам:
Tools -> Android -> AVD Manager
Edit AVD
(значок карандаша) Network Settings
после нажатия кнопки Show Advanced Settings
Вот скриншот, как это может выглядеть:
Оригинальное сообщение Для тех, кто использует Android Studio IDE :
Run -> Edit Configurations
Android Application -> [Your App]
Emulator
Network Speed
и Network Latency
для имитации различных скоростей и латентностей и т. д. . Кроме того, вы можете ввести различные аргументы в текстовое поле Additional command line options
, как указано в ответе @ inazaruk.
Снимок экрана ниже описывает, как выглядит этот экран Run Configuration
:
[/g2]
Я знаю, что он немного опоздал, чтобы ответить на этот вопрос, но я надеюсь, что это поможет другим, сталкивающимся с подобными проблемами!
Изменить Для тех, кто использует eclipse, см. ответ @ Abhi ниже.
Вы хотите проверить отсутствие сетевого подключения или просто медленное сетевое соединение? Если первое, вы можете перейти к Settings > Wireless & networks > Airplane mode
и включить режим полета. Это позволит вам проверить недоступность сети на реальном устройстве.
Я боролся с этой проблемой полдня, наконец, я пришел к этому решению:
*#*#4636#*#*
в приложении телефона Лучший способ сделать это - использовать Genymotion .
После того, как вы создали свое виртуальное устройство в Genymotion, вы можете использовать его в качестве эмулятора Android с гораздо лучшей производительностью, чем оригинальные AVD, а версия для личного использования бесплатна. , просто запустите этот учебник , чтобы установить прокси для устройства.
Запустите прокси-сервер на хост-машине, который имитирует плохие сетевые условия, например Crapify или Toxiproxy (я тестировал только первый), и вам хорошо идти.
Обновление:
Я только понял, что вы можете выбрать тот же самый стратегия с реальными устройствами тоже. Я чувствую себя идиотом за то, что не понял этого раньше. Просто запустите прокси-сервер Crapify на своем компьютере, установите прокси-сервер телефона на локальный адрес вашего компьютера и вуаля, у вас на вашем телефоне есть дрянной интернет.
Существует простой способ тестирования низких скоростей на реальном устройстве, которое, кажется, было упущено. Для этого требуется подключение к сети Mac и ethernet (или другое проводное).
Включите совместное использование Wi-Fi на Mac, превратив ваш компьютер в точку доступа Wi-Fi, подключите ваше устройство к этому. Используйте Netlimiter / Charles Proxy или Network Link Conditioner (который вы, возможно, уже установили) для управления скоростями.
Для получения дополнительной информации и для понимания того, какие скорости вы должны проверить при проверке: http://opensignal.com/blog/2016/02/05/go-slow-how-why -в-тест-приложения-на бедных-соединение /
Или на реальном устройстве вы можете перейти в Настройки -> Мобильные сети -> Предпочтительные типы сетей и выбрать самый медленный доступный ... Конечно, это очень ограниченно, но для некоторых целей тестирования этого может быть достаточно.
Поскольку опция разработчика iPhone применима к Wi-Fi-модему, вы можете получить iPhone с iOS 6
и выше (и был установлен на use for developments
с xcode
), настроить его для эмуляции нужного сетевого профиля, подключения ваше Android-устройство в свою точку доступа
[/g0]
Просто зайдите на Android-монитор устройства из студии Android, затем DDMS -> Emulator Control. Там будут свойства скорости и задержки.
и для пользователя Mac OS вы можете использовать Network Link Conditioner, который можно загрузить из Apple. установите его как AP на mac, и любые его подразделения могут подключиться.
вы можете использовать инструменты open source с помощью facebook ATC http://facebook.github.io/augmented-traffic-control/
Я использую прокси-сервер mitmproxy HTTPS. https://mitmproxy.org/
Mitmproxy - это приложение с открытым исходным кодом, которое позволяет перехватывать HTTP и HTTPS-соединения между любым клиентом HTTP (S). Он позволяет контролировать, фиксировать и изменять эти соединения в реальном времени. Изменить запрос, ответ, заголовок, ... Кроме того, вы можете перехватывать разные запросы.
, например. response_delay.py:
from mitmproxy import http
from time import sleep
def response(flow: http.HTTPFlow) -> None:
sleep(5.0)
Затем выполнение этого комментария задерживает все ответы с сервера:
mitmproxy --cert \*.asdf.at=./cert.pem --scripts response_delay.py
В моем приложении я использую фиксацию сертификата, поэтому вы необходимо добавить сертификат (private + public)
cat private.key public.key> cert.pem
blockquote>Здесь вы можете найти простой учебник .
Здесь вы можете найти другие примеры сценариев здесь .
Я нашел netlimiter4 лучшим решением для дросселирования данных для эмуляторов. Он обеспечивает гранулированный контроль через приличный gui и дает вам графическую обратную связь по пропускной способности данных для каждого процесса. В настоящее время в бесплатной бета-версии. screenshot
http://www.netlimiter.com/products/nl4
В магазине воспроизведения есть приложения для дроссельной заслонки для реальных устройств, но они требуют root (я не могу дать какие-либо рекомендации относительно того, насколько хорошо они работают, если вообще - YMMV.)
искать bradybound в магазине воспроизведения, я не могу опубликовать более одной ссылки ..
UPDATE на студии Android AVD:
Нет микроволн или лифтов:)
Простой способ протестировать ваше приложение с низким / плохим соединением в эмуляторе:
Go Run> Запустите конфигурацию, выберите приложение Android и перейдите на вкладку Target. Посмотрите параметры запуска эмулятора. Здесь вы можете легко изменить скорость сети и сетевую задержку.
Я знаю, что это старый вопрос, но ...
Некоторые телефоны в настоящее время имеют настройки для использования только 2G. Он идеально подходит для имитации медленного интернета на реальном устройстве.
[/g0]
Это может показаться немного сумасшедшим, но микроволновая печь служит в качестве микроволнового экрана. Поэтому, помещая устройство в микроволновую печь (НЕ включайте микроволновую печь, пока ваше устройство внутри!) Приведет к значительному снижению уровня сигнала. Он определенно бьет, стоя в лифте ...
Годы, но эй, я буду звонить с помощью своего надежного метода с помощью Genymotion.
Proxy -> Throttle Settings
Proxy -> Throttling
, чтобы включить дроссель Modify Network
Show Advanced Options
Proxy
на Manual
Proxy hostname
значение 10.0.3.2
Port
на 8888
Save
И теперь ваша сеть будет дросселирована!
Я удивлен, что никто не упоминал об этом. Вы можете подключаться через Bluetooth и разделить их на десять + метры (или меньше с препятствиями). У вас действительно плохая связь. Нет микроволновой печи, нет лифта, не требуется программное обеспечение.