Приложение переходит в режим ANR

Когда пользователи нажимают кнопку возврата в моем приложении. Вот сценарий:

  1. Пользователь запускает приложение - активность отображается
  2. Пользователь нажимает кнопку назад
  3. Пользователь перезапускает приложение. В этот момент приложение просто показывает пустой экран, ни одна из кнопок (домой / назад) не отвечает, через некоторое время появляется диалоговое окно принудительного закрытия.
    ПРИМЕЧАНИЕ. Если пользователь нажимает "Домой", а затем перезапускает приложение, этого не происходит, только если пользователь нажимает "Назад", а затем перезапускает его.

В моем 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 может вызываться несколько раз в течение жизненного цикла действия; Ваш код защищает от этого случая?

Другие вопросы по тегам