moveTaskToBack
默认的 KEYCODE_BACK 事件,Activity会被 finish() ,此时Activity会被销毁的,再次进入都会重新创建。moveTaskToBack 方法可以将Activity保留至后台,可以满足App保活的需求。
对于Shortcuts(桌面常用操作快捷方式)启动Activity完成特定功能,但是Activity并不需要展示时,moveTaskToBack 将非常有用。
注意: 该方法不会改变task中的Activity中的顺序,效果基本等同于home键。
moveTaskToBack 源码
public boolean moveTaskToBack(boolean nonRoot) {
try {
return ActivityManager.getService().moveActivityTaskToBack(mToken, nonRoot);
} catch (RemoteException e) {
// Empty
}
return false;
}
boolean nonRoot
false,仅当Activity为task根(即首个Activity例如启动Activity之类的)时才生效,非根Activity是则发生异常(所以注意判断)。
true,无论什么时候都会生效,忽略上述条件。
isTaskRoot() 可以判断当前Activity是否是task根
返回键模拟
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);//true对任何Activity都适用
return true;
}
return super.onKeyDown(keyCode, event);
}
生命周期回调
onCreate()
onStart()
onResume()
moveTaskToBack()
onPause()
onStop()
//切回App后不再调用onCreate()
onRestart()
onStart()
onResume()