android kill 监听,监听App可能被强制干掉的两种方案

前言

很多时候我们想要在app退出的时候做一些特殊的处理,如果用户的习惯良好,正常使用返回键退出app的话,我们可以简单的在MainActivity的onDestroy()方法中执行相应的操作就好了。但是,这也只是一种理想情况,由于android系统的特殊性,有些用户在准备关掉app的时候不是正常的操作,而且直接点开任务管理列表,从列表中将app关掉。这种关掉app的方式,google的API中没有能够监听app被强制杀死的方法,没有监听,没有回调。

方案一:监听最近列表键

官方API中没有给出最直观的解决方案,那只有我们自己去想办法了。直接的回调,监听没有路,那我们就去分析用户的行为。用户在强制杀死app前进行的一个操作肯定是唤起最近任务列表,然后才能找到app后干掉app。那无论国内还是国外的定制Android系统,都会有一种方式去触发唤起最近任务列表,或是虚拟按键,或是上滑手势(魅族Flyme系统的手势监听不到),或是实体键。无论是哪种方式,只要触发,系统就会发一个广播出去,那我们要做的就是去监听这个广播。

广播的intent就是Intent.ACTION_CLOSE_SYSTEM_DIALOGS:

private RecentlyReceiver mReceiver;

registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));

RecentlyReceiver 就比较简单了:

public class RecentlyReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

String reason = intent.getStringExtra("reason");

if (reason != null) {

switch (reason) {

case "homekey"://Home键

case "recentapps"://最近任务键

case "assist"://长按Home键

break;

default:

break;

}

}

}

}

这个广播可以接受三种事件,Home键,长按Home键,最近任务列表三种事件的监听。但也无法精确的定位用户就是要干掉你的app,所以标题写的是可能被干掉。

51f6d13b97bc

方案二:监听app处于后台

app被强制杀死的前提之一就是app肯定会被置于后台,那我们可以去监听这个事件。我们这次用另一种方式来监听app处于后台:Application实现Application.ActivityLifecycleCallbacks这个接口:

上代码:

public class DemoApp extends Application implements Application.ActivityLifecycleCallbacks {

@Override

public void onCreate() {

super.onCreate();

registerActivityLifecycleCallbacks(this);

}

/**

* 当前Acitity个数

*/

private int activityCount = 0;

@Override

public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

}

@Override

public void onActivityStarted(Activity activity) {

activityCount++;

}

@Override

public void onActivityResumed(Activity activity) {

}

@Override

public void onActivityPaused(Activity activity) {

}

@Override

public void onActivityStopped(Activity activity) {

if (--activityCount <= 0) {

Log.d("哈哈哈", "app处于后台");

//处理想要处理的工作

}

}

@Override

public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

}

@Override

public void onActivityDestroyed(Activity activity) {

}

}

重写的onActivityStopped这个方法可以监听Activity的全部stop事件,可以定义一个int值,在重写的onActivityStarted方法里监听Activity的start方法执行次数,在onActivityStopped减去对应次数,当这个int值为0的时候可以确定app是处于后台。强制kill掉app也需要先将app置于后台才能进行,所以这个方法可以解决我们的问题。

这个方法也不能回调被杀死,只是监听app中所有Activity的生命周期,我们只监听Activity的onStart和onStop方法就行,所有的Activity处于onStop状态,那app肯定是处于后台了,在app被强制杀死前处理完我们要处理的事情就ok了。

总结

虽然这两种方案都不能彻底的解决app被强制干掉的事件监听,但总归是有途径去监听app可能会被干掉,尤其是最近任务列表键的监听,当用户点了这个按键,极有可能就是要杀死全部App的操作。所以多多少少还是有点用途的,大家看情况使用吧。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值