一个apk完全的自动静默启动目前不能实现,所以就用到了Activity的一个方法activity.moveTaskToBack(boolean),这个方法就是可以退出应用到后台而不是finish()退出整个应用。
看看下面的简单实现吧
private boolean isFirst = true; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (isFirst) {// 第一次默认是静默启动的
// 界面初始化后,就直接将本应用推到后台?
this.moveTaskToBack(false);
isFirst = false;
}
} /**
* 在activity中调用 moveTaskToBack (boolean nonRoot)方法即可将activity
* 退到后台,注意不是finish()退出。
*
* 参数为false代表只有当前activity是task根,指应用启动的第一个activity时,才有效;
*
* 如果为true则忽略这个限制,任何activity都可以有效。
*
* moveTaskToBack调用后,task中activity的顺序不会发生变化,例如A启动B,B中调用此方法退到后台,
* 重新启动应用会调用B中的onRestart
* -onStart-onResume方法,不会重新调用onCreate,而且在B中按下back键返回的还是A,这就是退到后台的功能。
*
*
* 另外在activity中按下back键,实际是调用了finish方法,应用退出。虽然应用已经退出,但进程没有被杀死,
* android中一个应用运行于独立的一个虚拟机实例中,所以在重新启动应用时一个类中的静态对象还保持着运行时的状态,注意在合适位置复位这些状态。
*
* 关于moveTaskToBack 方法,官方API解释如下: public boolean moveTaskToBack (boolean
* nonRoot) Since: API Level 1
*
* Move 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.
*
*
*
*/