Приложение переходит в режим ANR
Когда пользователи нажимают кнопку возврата в моем приложении. Вот сценарий:
- Пользователь запускает приложение - активность отображается
- Пользователь нажимает кнопку назад
- Пользователь перезапускает приложение. В этот момент приложение просто показывает пустой экран, ни одна из кнопок (домой / назад) не отвечает, через некоторое время появляется диалоговое окно принудительного закрытия.
ПРИМЕЧАНИЕ. Если пользователь нажимает "Домой", а затем перезапускает приложение, этого не происходит, только если пользователь нажимает "Назад", а затем перезапускает его.
В моем onCreate() у меня есть некоторый код настройки сети. Однако onDestroy() имеет соответствующий код очистки, поэтому я не понимаю, почему это происходит.
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(DEBUG_TAG, "onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Aquire the multicast lock
// Create an instance of JmDNS
// Add a listener for Bonjour services of a given type
}
@Override
protected void onDestroy() {
Log.d(DEBUG_TAG, "onDestroy()");
// Remove the services listener
// Set the reference to JmDNS instance null
// Release the multicast lock
super.onDestroy();
}
Не уверен, что происходит, и не знаю, как это отладить.
Интересно, что "Zeroconf Browser" - популярное приложение, которое я скачал с Android Market, чтобы использовать для отладки, - похоже, имеет ту же проблему.
РЕДАКТИРОВАТЬ: Изменен код с onStart()/onStop() на onCreate()/onDestroy(). Та же проблема, что и раньше.
РЕДАКТИРОВАТЬ: Для тех, кто сталкивается с аналогичной проблемой, это то, что вызывало мои страдания. Код Android не был виновником: http://sourceforge.net/tracker/index.php?func=detail&aid=2933183&group_id=93852&atid=605791
1 ответ
Возможно, вы делаете сетевые запросы в потоке пользовательского интерфейса. Вы можете проверить Painless Threading и AsyncTask для обработки этого.
Обратите внимание, что это может быть хорошей идеей, чтобы сделать ваши настройки и демонтировать в onCreate
а также onDestroy
, onStart
может вызываться несколько раз в течение жизненного цикла действия; Ваш код защищает от этого случая?