Android如何安全退出整个引用



退出整个应用(多个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();  
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值