Попробуйте передать все сетевые запросы (я также использую его с транзакциями db) через android.os.Handler. Используйте Runnables (лучше реализовать собственный класс Runnable) для реализации действий для выполнения (добавьте обратные вызовы, протоколирование и другую логику в свой класс Runnable). Таким образом, вы можете легко зарегистрировать слушателей в вашем классе Runnable, чтобы делать какие-либо спящие или сбои, которые вас интересуют.
Вот какой-то код моего проекта. Класс M_ClientRunnable реализует Runnable и имеет дополнительные методы для регистрации «отмена», прослушивателей отказов и слушателей успеха.
class LooperThread extends Thread {
public Handler mHandler;
public LooperThread() {
super();
start();
}
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
getLogger().info(TAG, msg.toString());
}
};
Looper.loop();
}
public boolean post(M_ClientRunnable runnable) {
if(!isAlive()) {
start();
}
if (mHandler!=null) {
return mHandler.post(runnable);
} else {
return false;
}
}
};
private LooperThread looper = new LooperThread();
@Override
public boolean post(M_ClientRunnable runnable) {
return looper.post(runnable);
}
Очень хороший вопрос! Я всегда делаю это с помощью своего маршрутизатора. Но это боль в заднице! –
Возможный дубликат [Имитация низкой пропускной способности в android] (http://stackoverflow.com/questions/8693117/simulate-low-bandwidth-in-android) – starkej2
@ blacksh33p Низкая пропускная способность! = Надежность (потеря пакетов, прерывание сети и т. Д.)). Этот другой вопрос кажется более уместным: http://stackoverflow.com/q/130354/489607, но я все еще не считаю его дубликат, рассматривая контекст и теги для этого конкретного вопроса. Хотя ответы, безусловно, пересекаются, этот вопрос должен/должен стимулировать другие, конкретные ответы. – davidcesarino