2011-05-30 89 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); 
}