如何退出已打开多个Activity的应用?

2019-1-25 liuyingcong 安卓开发

在退出应用的时候,应用内可能打开了多个activity,调用finish()只能关闭当前activity,调用System.exit()或Process.killProcess(Process.myPid())短暂退出应用后,程序会重启,也不能达到目的。

下面介绍两种退出已打开多个activity的应用:

方法一

当然可以发广播,在其他开启的activity中注册广播接收者:

  IntentFilter filter = new IntentFilter("com.example.demo.finish");
        receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                WelcomeActivity.this.finish();
            }
        };
        registerReceiver(receiver, filter);
      在当前activity中退出应用的逻辑中发送广播:
  Intent intent = new Intent("com.example.demo.finish");
    sendBroadcast(intent);
    System.exit(0);

      这样就能退出应用了。



方法二

下面介绍第二种方法,思路是把开启的activity存储在一个容器里,在退出应用的时候,遍历容器,挨个调用finish()方法。

public class MyApplication extends Application {
    
    private List<Activity> activityList = new LinkedList<Activity>();
    private static MyApplication instance;
    
    //单例模式中获取唯一的MyApplication实例  
    public static MyApplication getInstance() {
        if(null == instance) {
            instance = new MyApplication();
        }
        return instance;
    }
    
    //添加Activity到容器中  
    public void addActivity(Activity activity) {
        activityList.add(activity);
    }
    
    //遍历所有Activity并finish  
    public void exit() {
        for(Activity activity:activityList) {
            activity.finish();
        }
        System.exit(0);
    }
 } 
在每一个Activity中的onCreate方法里添加该Activity到MyApplication对象实例容器中 
MyApplication.getInstance().addActivity(this);  
在需要结束所有Activity的时候调用exit方法 
  MyApplication.getInstance().exit();  



注意使用这种方法,一定不要把所有activity都存在容器中,因为这样会造成内存泄漏,只把退出应用时后台还在开启的activity存在里面即可。

网站备案号:京ICP备11043289号-1 北京市公安局网络备案 海1101084571
版权所有 北京育灵童科技发展有限公司 Copyright © 2002-2024 www.elight.cn, All Rights Reserved