2011-05-30 48 views
0

我不希望我的活力在按下「後退」按鈕時被破壞。我的應用程序與1.6 SDK兼容。參照http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.htmlOverride back button to act like home button,我選擇以下代碼:不要調用onDestroy on onBackPressed

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
       // For versions lower than 2.0  
    if (Utility.buildDet.getDeviceBuildAPI() <= Utility.buildDet.getBuildApi() 
      && keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
     onBackPressed(); 
    return super.onKeyDown(keyCode, event); 
} 

     // In any version, this function will be called 
public void onBackPressed() { 
    // This will be called either automatically for you on 2.0  
    // or later, or by the code above on earlier versions of the platform. 
    Log.i(TAG, "##### BACK KEY IS PRESSED"); 
    this.moveTaskToBack(true); // on false, it shows moveTaskToBack: 11 
    return; 
} 

當我按下返回按鈕,我這些日誌

: ##### BACK KEY IS PRESSED 
INFO/ActivityManager(51): moveTaskToBack: 10 
: !!!!!!! Into onPause 
: !!!!!!! Into onStop 
: !!!!!!! Into DESTROY 

我還沒有重寫moveTasToBack()。 Anu clu當按下後退按鈕時,我該怎麼做纔不會被破壞。也許我想忽略按鈕或隱藏活動。

任何線索,爲什麼它不按預期工作。

感謝

回答

8
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 

    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
    { 

     this.moveTaskToBack(true); 
      return true; 
     } 

    return super.onKeyDown(keyCode, event); 
} 
+0

感謝Adil,它與1.6和2.1+一起工作。我希望它適用於需要onBackPressed的Droid 2.0+的真實設備(如在搜索查詢時在互聯網上閱讀)。 – Tvd 2011-05-30 09:26:46

+0

+1對於很好的答案 – 2012-04-30 08:06:17

+0

它的工作。謝謝。但是我在一個活動中嵌套了片段。我如何處理後臺? – TheOnlyAnil 2015-09-22 15:10:44

2

你爲什麼要改變標準體系bahaviour? Android系統可能會破壞活動。它應該僅取決於系統。你可能想要做一些可以做不同的事情。也許你需要服務或實現保存活動狀態?

+1

完成某些步驟後,我確實已啓動服務。並且還使用onSaveInstanceState保存狀態。如果應用程序是停止並再次單擊以啓動,則會重新開始並且不會重新創建。應用程序有它自己的「Qui」按鈕來關閉活動,平滑地清理所有組件,服務等。當應用程序運行並且用戶單擊「後退」按鈕時,我還可以做些什麼,可能是由於錯誤或服務尚未啓動,所以我想要它可以活着,只要它可以? – Tvd 2011-05-30 09:41:31

0

捕回密鑰不會解決這個問題。活動Android中的生命週期最好留給系統。系統會在你想要的時候殺死你的活動。

0
@Override 
public void finish() { 
    //super.finish(); 
    moveTaskToBack(true); 
}