2011-03-30 50 views
0

當用戶在我的應用程序中按下後退按鈕時。下面是這種情況:進入ANR模式的應用程序

  1. 用戶啓動應用程序 - 活動 顯示出來
  2. 用戶按下後退按鈕
  3. 用戶重新啓動應用程序。 此時,應用程序僅顯示一個空白屏幕,但在某些時間後,沒有任何按鈕(家庭/後臺)響應,此時會出現強制關閉對話框。
    注意:如果用戶按下「Home」,然後重新啓動應用程序,則不會發生此情況,只有在用戶按下「Back」後才能重新啓動。

在我的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

當你按下後退按鈕時,活動被破壞,所以第二次,它在'onCreate()'中被卡住了。那裏會發生什麼? – bigstones 2011-03-30 19:39:52

+0

@Travis你可以標記,但這是BACK按鈕的默認行爲:http://developer.android.com/guide/practices/ui_guidelines/activity_task_design.html#navigating_away_from_an_activity – bigstones 2011-03-30 20:01:34

+0

@bigstones:+1。你是絕對正確的。活動**被毀壞。那是導致應用程序掛起的原因...在我的onDestroy()方法中存在一個錯誤。萬分感謝! – OceanBlue 2011-03-30 20:36:11

回答

2

您可能正在UI線程上發出網絡請求。您可以結賬Painless ThreadingAsyncTask來處理。

請注意,在onCreateonDestroy中進行設置和拆卸可能是個不錯的主意。在活動的life cycle期間可以多次調用onStart;你的代碼是否在防範這種情況?

+0

感謝您的回答。兩點:1.事實上,我正在UI線程上發出網絡請求。這不是一個問題,只有當網絡請求很長時,比如下載一個巨大的文件等。 2.其實我的原代碼是在onCreate()和onDestroy()。我在調試時將它移到了onStart()/ onStop()。如果使用onCreate()/ onDestroy(),也會出現同樣的問題。 – OceanBlue 2011-03-30 19:50:45

+0

請參閱編輯我的問題。 – OceanBlue 2011-03-30 20:07:43

+1

您可以使用調試器瞭解您的代碼掛在哪裏嗎? – 2011-03-30 20:10:18

相關問題