android中打开的activity会被放入栈中,直到finish被调用或系统回收。因此有时候自己开发的程序在退出时会因为栈中activity没有清除而无法完全退出。
我感觉可以通过修改activity的启动模式来实现完全退出。
首先,把主activity的启动模式改为single Task(如果在栈中已经有该Activity的实例(会调用实例的oNewwIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈,如果栈中不存在该实例,将会创建新的实例放入栈中。),即:
<activity
android:label="@string/app_name"
android:name=".SingleInstanceActivity"
android:launchMode="singleTask" >
然后,要退出时,先跳转到主activity中(移除栈中已经打开的除主activity之外的所有activity),在调用主activity的finish方法即可退出。为了区别是要返回主页还是要退出最好加一个区分参数,如:在intent中加一个flag,当为TRUE时表示要退出,当为false时表示要转到主页。
注意:因为主activity是singleTast模式所以一定要重写onNewIntent方法(当栈中已存在该activity时不会再调用onCreate方法而调用onNewIntent方法),其中要有和onCreate方法中一样的退出代码。
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate() {
setContentView(R.layout.main);
boolean out=getIntent().getBooleanExtra("logout", false);
if(out){
this.finish();
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
boolean out=intent.getBooleanExtra("logout", false);
if(out){
this.finish();
}
}
}