利用Android两行代码真正杀死你的App

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<Activity> 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);
 }

}

在BaseActivity的onCreate()方法中调用了ActivityCollector的addActivity()方法,表明将当前正在创建的活动添加到活动管理器里。

然后在BaseActivity中重写onDestroy()方法,并调用了ActivityCollector的removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除。

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

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

在Activity中:

finishAffinity();

如果在Fragment中:

getActivity().finishAffinity();

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

以上这篇利用Android两行代码真正杀死你的App就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Android APP存活检测方式

    稍微深入了解过Android的开发者都知道,Android中每个APP的中的所有组件的生命周期状态都是由ActivityManagerService(简称:AMS)进程来维护的,所以当某个APP被kill或意外crash时,AMS进程会第一时间维护APP的组件. 我们今天不会看AMS进程维护APP的流程,只看AMS是通过什么手段第一时间得到的通知,我们是否能够将这种手段应用到我们的APP中,在多进程环境下,通过这种手段进程间互相监控起到一个守护的作用. 我们知道一个APP对应唯一一个Activi

  • 利用Android两行代码真正杀死你的App

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

  • 让Android应用不被杀死(killer)的方法

    方法: 对于一个service,可以首先把它设为在前台运行: 复制代码 代码如下: public void MyService.onCreate() {         super.onCreate();         Notification notification = new Notification(android.R.drawable.my_service_icon,                "my_service_name",                 Sys

  • 利用Android中的TextView实现逐字显示动画

    前言 Android的TextView只能设置整个TextView的动画,而不能设置每个文字的动画.即使是使用TextSwitcher,也很难实现我想要的效果. 所以选择自定义一个.大体思路是:继承ViewGroup,设置Text的时候,每个文字为一个TextView,每隔一个固定时间,启动每个TextView的动画. 定义一个CTextView,继承ViewGroup: 实现主要代码: public class CTextView extends ViewGroup { } 向外提供一个方法s

  • 如何利用Android Studio将moudle变成jar示例详解

    前言 本文主要给大家介绍的是关于利用Android Studio将moudle变成jar的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 方法如下: 1.在moudle中的build.gradle文件中添加如下代码:(和android.dependencies标签同级) task makeJar(type: Copy) { delete 'build/libs/test.jar' from('build/intermediates/bundles/release/')

  • 利用Android实现比较炫酷的自定义View

    目录 一.背景 1.1.控件效果 1.2.从功能上分析一下这个控件,大致有以下特点 1.3.从结构上分析 二. 背景圆实现 2.1.实现粒子运动 2.2.实现渐变色圆 2.3.展示背景圆的扇形区域 2.4.实现指针变色 2.5.实现背景圆颜色随扇形角度变化 三.跳动数字动画实现 3.1.属性动画+2个TextView实现数字上下切换动画 四.项目源码 总结 一.背景 1.1.控件效果 要实现的自定义控件效果大致如下,实现过程中用到了比较多的自定义View的API,觉得比较有代表性,就分享出来也当

  • 利用Android从0到1实现一个流布局控件

    目录 前言 演示效果: 实现步骤: 核心点: 总结 前言 流布局在在项目中还是会时不时地用到的,比如在搜索历史记录,分类,热门词语等可用标签来显示的,都可以设计成流布局的展示方式.这里我从0到1实现了一个搜索历史记录的流布局. 演示效果: 实现步骤: 1.创建FlowLayoutView,创建数据源,并添加各个子view. 2.在onMeasure方法中遍历子view,通过简单计算剩余宽度,用集合存储当前行的几个子view,再根据子view的累加高度设置自己的最终尺寸. 3.在onLayout方

  • Android实例代码理解设计模式SOLID六大原则

    目录 单一职责原则 定义 代码解释 未遵守单一原则 遵守单一原则 开闭原则 定义 代码解释 里氏替换原则 定义 代码解释 依赖倒置原则 定义 代码解释 未遵守依赖导致原则 遵守依赖导致原则 接口隔离原则 定义 代码解释 未遵守接口隔离原则 遵守接口隔离原则 迪米特原则 定义 代码解释 单一职责原则 定义 定义: 确保单例类只有一个实例,并且这个单例类提供一个函数接口让其他类获取到这个唯一的实例. 解释:一个类只负责一个职责,不要存在多于一个导致类变更的原因. 代码解释 比如一个类记录一些食品的名

  • 如何利用Android仿微博正文链接交互效果

    目录 前言 一.链接的匹配和显示交互 二.链接的点击交互 总结 前言 社区内容经常会有插入链接的需要,这时就产生了对链接的UI和点击交互的需求,我们在微博中也经常会在列表页面和详情页面看到.下边我们就此功能分析一下具体实现. 一.链接的匹配和显示交互 首先我们先分析一下链接的组成部分,可以肯定的是需要一个显示的标题,我们可能会对这个标题在UI表现上做些处理(常见的是一个链接的标志和设置不同的颜色)来提示和吸引用户的注意,另外还需要点击时跳转的链接,这条链接可以是内部也可以是外部(这就属于业务的需

  • 利用Android实现光影流动特效的方法详解

    目录 前言 MaskFilter 类简介 MaskFilter 的几种效果对比 光影流动 光影流动效果1 光影流动效果2 光影流动效果3 光影流动效果4:光影沿贝塞尔曲线流动 总结 前言 Flutter 的画笔类 Paint 提供了很多图形绘制的配置属性,来供我们绘制更丰富多彩的图形.前面几篇我们介绍了 shader 属性来绘制全屏渐变的聊天气泡背景.渐变流动的边框和毛玻璃效果的背景图片,具体可以参考下面几篇文章. 让你的聊天气泡丰富多彩! 手把手教你实现一个流动的渐变色边框 利用光影变化构建立

  • 利用Android实现一种点赞动画效果的全过程

    目录 前言 点击后的缩放效果 拇指的散开效果 示例 总结 前言 最近有个需求,需要仿照公司的H5实现一个游戏助手,其中一个点赞的按钮有动画效果,如下图: 分析一下这个动画,点击按钮后,拇指首先有个缩放的效果,然后有5个拇指朝不同的方向移动,其中部分有放大的效果. 点击后的缩放效果 本文通过ScaleAnimation 实现缩放效果,代码如下: private fun playThumbUpScaleAnimator() { // x.y轴方向都从1倍放大到2倍,以控件的中心为原点进行缩放 Sca

随机推荐