Android上杀掉进程的方式有两种,分别是System.exit(0)和Process.killProcess(Process.myPid()),这两种方法比较暴力,App进程会被直接杀掉,但是由于Android的安全机制,你会发现,在调用上述两种方法后,App会被自动重启,并未达到我们想要的杀死状态!那我们该怎样实现真正的杀死App呢?

我认为需要两个步骤

一、关闭打开的所有Activity

二、调用System.exit(0)或Process.killProcess(Process.myPid())


先介绍两种关闭所有Activity的方法:


1、这第一种方法是郭神在《第一行代码》中讲到的,我在这引用一下。

首先我们需要用一个专门的集合类对所有的活动进行管理,新建一个ActivityCollector类作为活动管理器,代码如下所示:

private static List activities = new ArrayList<>();    public static void addActivity(Activity activity) {        activities.add(activity);    }    public static void removeActivity(Activity activity) {        activities.remove(activity);    }    public static void finishAll() {        for (Activity activity : activities) {            if (!activity.isFinishing()) {                activity.finish();            }        }        activities.clear();    }

在活动管理器中,我们通过一个List来暂存活动,然后提供了addActivity()方法用于向List中添加一个活动,提供了removeActivity()方法用于从List中移除活动,最后提供了finishAll()方法用于将List中存储的活动全部销毁掉。

接下来我们创建一个BaseActivity(这是一个继承至AppCompatActivity的普通java类,不需要在AndroidManifest中注册),之后我们所创建的所有Activity均需要继承至这个BaseActivity,代码如下所示:

public class BaseActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Log.d("BaseActivity", getClass().getSimpleName());        ActivityCollector.addActivity(this);    }    @Override    protected void onDestroy() {        super.onDestroy();        ActivityCollector.removeActivity(this);    }}

BaseActivityonCreate()方法中调用了ActivityCollectoraddActivity()方法,表明将当前正在创建的活动添加到活动管理器里。然后在BaseActivity中重写onDestroy()方法,并调用了ActivityCollectorremoveActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除。

从此以后,不管你想在什么地方退出程序,只需要调用ActivityCollector.finishAll()方法就可以了。

2、这第二种方法相当简单给力!只需要一行代码!

在Activity中:

finishAffinity();
如果在Fragment中:

getActivity().finishAffinity();

OK!现在我们已经将所有Activity关闭了,接下来只需要调用System.exit(0)或Process.killProcess(Process.myPid())中的一种,就可以实现在任意地方,随时随地真正的杀死App了!






更多相关文章

  1. Android 中LayoutInflater(布局加载器)源码篇之createViewFromTag
  2. Android代码混淆之混淆规则
  3. Android智能指针SP WP使用方法介绍
  4. android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用
  5. Android 之采用execSQL和rawQuery方法完成数据的添删改查操作
  6. Android ListView 滚动的N种方法
  7. Android Handler 异步消息处理机制 《第一行代码》
  8. Android解决输入法自动弹出方法大全

随机推荐

  1. Android控件之TextView(显示文本框控件)
  2. Android(安卓)Edittext获取焦点后,弹出的
  3. Professional Android(安卓)2 Developmen
  4. 主题与样式详解
  5. Android相对布局属性全集
  6. Android(安卓)RelativeLayout(相对布局)
  7. Android(安卓)页面布局属性全
  8. Android(安卓)SDK 国内镜像
  9. Android菜鸟日记7
  10. ListView详解