按下后退按钮,我希望我的应用程序进入停止状态,而不是被破坏状态 .
在Android docs中它说明:
...并非所有活动都具有按下BACK时它们被销毁的行为 . 当用户开始在音乐应用程序中播放音乐然后按BACK时,应用程序将覆盖正常的后退行为,防止播放器活动被破坏,并继续播放音乐,即使其活动不再可见
How do I replicate this functionality in my own application?
我认为必须有三种可能性......
- 按下后退按钮(如下所示),然后调用主页按钮调用的任何方法 .
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Log.d(this.getClass().getName(), "back button pressed");
}
return super.onKeyDown(keyCode, event);
}
-
按下后退按钮,然后按下主页按钮 .
-
按下后退按钮,然后启动主屏幕的活动,有效地将我的应用程序的活动置于停止状态 .
Edit: 我了解服务,并且在与此问题相关的应用程序中使用了一个服务 . 这个问题具体是关于按下后退按钮将Activity置于停止状态而不是销毁状态 .
9 回答
大多数情况下,你需要创建一个Service来在后台执行某些操作,而你的可见
Activity
只是控制这个Service
. (我'm sure the Music player works in the same way, so the example in the docs seems a bit misleading.) If that'是这样的,那么你的Activity
可以像往常一样finish
而且Service
仍然会运行 .一种更简单的方法是捕获按下
Back
按钮并按如下方式调用moveTaskToBack(true):我认为首选选项应该是一个Activity正常完成并能够重新创建自己,例如如果需要,从服务中读取当前状态 . 但
moveTaskToBack
有时可以作为快速替代品使用 .NOTE :正如Dave在Android 2.0下面所指出的那样引入了一个新的
onBackPressed
方法,并且these recommendations就如何处理Back按钮 .使用以下代码:
如果你想赶上后退按钮,请看this post on the Android Developer Blog . 它涵盖了在Android 2.0中执行此操作的更简单方法,以及为在1.x和2.0上运行的应用程序执行此操作的最佳方法 .
但是,如果您的活动已停止,它仍可能会被杀死,具体取决于设备上的内存可用性 . 如果您希望在没有UI的情况下运行流程,则应创建
Service
. The documentation says the following about Services:这些似乎适合您的要求 .
尝试覆盖android.app.Activity类中定义的void
onBackPressed()
.如果它帮助其他人,我有一个活动有2个布局,我打开和关闭visibilty,试图模仿一种page1> page2结构 . 如果他们在第2页并按下后退按钮我想让他们回到第1页,如果他们按下第1页上的后退按钮它应该仍然正常工作 . 它很基本,但它的工作原理
希望它可以帮助别人,欢呼
工作实例..
确保不要调用super.onBackPressed();
通过这种方式,您的后退按钮就像主页按钮一样 . 它不会完成您的活动,但会将其带到后台
第二种方法是在
onBackPressed
中调用moveTaskToBack(true);
并确保删除super.onBackPressed
更好的是,OnPause()怎么样:
当活动进入后台但被(但)尚未被杀死时,被称为活动生命周期的一部分 . onResume()的对应部分 .
当在活动A前面启动活动B时,将在A上调用此回调 . 在A的onPause()返回之前不会创建B,所以一定要在这里做任何冗长的事情 .
此回调主要用于保存活动正在编辑的任何持久状态,并确保在没有先杀死此活动的情况下没有足够的资源来启动新活动时不会丢失任何内容 .
这也是一个很好的地方,可以停止动画和其他消耗大量CPU的事情,以便尽快切换到下一个活动,或关闭独占访问的资源,如摄像头 .
在android 2.0之后覆盖onBackPressed() . 如
我使用@Mirko N.应答者使用了新的Custom EditText
然后从您的活动中设置数据
谢谢 .