最近在调试程序,发现每次按返回键,一直退出到桌面。再次打开都要重新从启动界面进入,但是微信QQ并不是这样的。调试了一下微信的,发现返回到桌面的时候,微信的界面还是处于stop状态,并没有销毁。后来找了好久,找到了解决方法,主要是两个函数的使用:
boolean isTaskRoot()
用来判断该Activity是否为任务栈中的根Activity
boolean moveTaskToBack (boolean nonRoot)
用于将activity退到后台,不是finish
从生命周期来说,会执行onPause、onStop,但不会执行onDestroy
恢复的时候也一样,会执行onStart、onResume,但不会执行onCreate
参数nonRoot表示的含义是此方法对非根activity是否有效,
- true表示对所有activity均有效,
- false表示只对根activity有效。
返回值:该activity被退出到后台或者他已经在后台了返回true,否则返回false
官方文档:
public boolean moveTaskToBack (boolean nonRoot)
Since: API Level 1Move the task containing this activity to the back of the activity stack. The activity’s order within the task is unchanged.
Parameters:
nonRoot If false then this only works if the activity is the root of a task; if true it will work for any activity in a task.
Returns:
If the task was moved (or it was already at the back) true is returned, else false.
使用实例:
在baseActivity 中声明下面的函数:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
if (isTaskRoot()) {
moveTaskToBack(false);
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
}
参考:
Activity之isTaskRoot和moveTaskToBack方法简介
Android按返回键退出程序但不销毁
Android moveTaskToBack()方法实现手动隐藏当前Activity
【Android】Android实现不重复启动APP的方法