zoukankan      html  css  js  c++  java
  • 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 Activity
    public 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);
                 }
    }
    
    @Override
    public 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)这个必须要加,不然会出一堆错,找了个最简单的方法。

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

  • 相关阅读:
    删除文件用哪个命令?如果需要连目录及目录下文件一块删除呢?删除空文件夹用什么命令?
    Ls 命令执行什么功能?可以带哪些参数,有什么区别?
    绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?
    查看文件内容有哪些命令可以使用?
    把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?
    终止进程用什么命令? 带什么参数?
    查看各类环境变量用什么命令?
    怎么使一个命令在后台运行?
    Grep 命令有什么用?如何忽略大小写?如何查找不含该串的行?
    Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?
  • 原文地址:https://www.cnblogs.com/yejiurui/p/2839463.html
Copyright © 2011-2022 走看看