您的位置:首页 > 移动开发 > Android开发

Android中退出多个Activity的两个方法

2016-10-19 09:25 330 查看
这里介绍两种方法:一种把每个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方法


方法二、使用广播

//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)这个必须要加,不然会出一堆错,找了个最简单的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: