一个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. * * * */