打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android中退出多个Activity的两个经典方法

这里介绍两种方法:一种把每个activity记住,然后逐一干掉;另一种思路是使用广播。

方法一、用list保存activity实例,然后逐一干掉


上代码:

import java.util.LinkedList;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.app.Application;import android.content.DialogInterface;import android.content.Intent;public class SysApplication extends Application {private List<Activity> mList = new LinkedList<Activity>();private static SysApplication instance;private SysApplication() {}public synchronized static SysApplication getInstance() {   if (null == instance) {         instance = new SysApplication();      }         return instance;      }// add Activitypublic void addActivity(Activity activity) {      mList.add(activity);}    public void exit() {        try {           for (Activity activity : mList) {              if (activity != null)                 activity.finish();                 }             } catch (Exception e) {                 e.printStackTrace();             } finally {                System.exit(0);             }}@Overridepublic void onLowMemory() {    super.onLowMemory();      System.gc();}}在每个Activity的onCreate方法中添加类似代码:[java] public void onCreate(Bundle savedInstanceState) {             super.onCreate(savedInstanceState);                SysApplication.getInstance().addActivity(this);            }       public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            SysApplication.getInstance().addActivity(this);        }在需要退出程序的时候,调用:SysApplication.getInstance().exit();SysApplication.getInstance().exit();简而言之,通过单例模式把每个Activity 的引用添加到一个全局链表中,每次退出程序调用System.exit(0)时,先调用链表中Activity 的finish方法附:此方法也可参考链接:http://maosidiaoxian.iteye.com/blog/1404725

 

方法二、使用广播

//2.2退出整个应用难免让人困扰,曾经一度的尝试一下方式:ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);     manager.killBackgroundProcesses(package);//不行android.os.Process.killProcess(android.os.Process.myPid());  // 也不行manager.restartPackage(package); // 还是不行Intent MyIntent = new Intent(Intent.ACTION_MAIN);   MyIntent.addCategory(Intent.CATEGORY_HOME);   startActivity(MyIntent);   finish();//这个只是退回到桌面,如果打开多个Activity关闭重新打开也会有问题,还是还是不行//看到有人说广播机制,发现是个好东东,能彻底解决这个问题,废话不说看代码:public abstract class EnterActivity extends BaseActivity {   ...// 写一个广播的内部类,当收到动作时,结束activity  private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {    @Override       public void onReceive(Context context, Intent intent) {            unregisterReceiver(this); // 这句话必须要写要不会报错,不写虽然能关闭,会报一堆错            ((Activity) context).finish();          }       };   @Override   public void onResume() {      super.onResume();// 在当前的activity中注册广播IntentFilter filter = new IntentFilter();     filter.addAction(Attribute.PAGENAME);     registerReceiver(this.broadcastReceiver, filter); // 注册}public void close() {    Intent intent = new Intent();       intent.setAction(Attribute.PAGENAME); // 说明动作         sendBroadcast(intent);// 该函数用于发送广播       finish();       }      ... }别人写的缺了个地方(unregisterReceiver)这个必须要加,不然会出一堆错,找了个最简单的方法。

本文学习时候收集于网络,只是不知道了源地址,感谢作者提供,还往作者见谅,大家一起学习!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
android完全退出应用程序
Android全局对象Application的使用,以及如何在任何地方得到Application全局对象
系出名门Android(4) - 活动(Activity), 服务(Service), 广...
android service入门
android自定义一个本地服务的方法
Android之Bundle传递数据详解与实例及Bundle与SharedPreferen...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服