退出整个应用(多个Activity)
1)、制造抛异常导致程序强制退出:
2)、用个容器记录每个打开的Activity,在需要退出的时逐一关闭每个Activity
3)、广播方式:
4)、递归退出
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。
5).接下来看一下怎么利用activity启动模式退出整个应用
在activity启动模式singleTask 模式中,刚才提到如果该Activity实例存在但不是在栈顶,它会让该实例回到栈顶,而它上面的实例将会被移出栈。
这样子,我们就可以将应用中的主入口Activity(这里假设主Activity为MainActivity)设置成singleTask 模式,
这样子我们就保证了这个Activity实例存在于栈底中,后面不管有多少其他Activity实例添加进来它始终会在栈底,
这时我们只要在要关闭整个应用的那个Activity中把他转到这个Activity来(startActivity(xx.this,MainActivity.class));
这样子其他的activity实例就会被移出栈,这时栈中只剩MainActivity实例,如果此时要是再能让这个MainActivity实例移除出栈,那么我们就达到了关闭整个应用的目的,
不知道大家刚才有没有注意到OnNewIntent()这个方法,这个方法就是重用activity实例时会被调用,
因此我们只要在MainActivity重写该方法并加上一句finish()来关闭当前activity实例我们的目的就达到了……
package com.test.launchmode;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
@Override
protected final void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
startActivity(new Intent(this,xx.class));
}
@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
this.finish();
}
}
推荐:
public class MainActivity extends Activity {
private Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//看这里
MyApplication myApplication = (MyApplication) getApplication();
myApplication.activityList.add(this);
bt = (Button) findViewById(R.id.bt);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this, AActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
//还有这里
MyApplication myApplication = (MyApplication) getApplication();
myApplication.activityList.remove(this);
}
//这里
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.KEYCODE_BACK == keyCode){
exit();
}
return true;
}
//这里
public void exit(){
MyApplication myApplication = (MyApplication) getApplication();
for(Activity activity: myApplication.activityList){
activity.finish();
}
}
}
关键是这里:
public class MyApplication extends Application {
public List<Activity> activityList;
@Override
public void onCreate() {
activityList = new ArrayList();
super.onCreate();
}
}