1. 程式人生 > >Android App退出檢測

Android App退出檢測

圖片 pri 分享 inf 介紹 真的 ets app檢測 pex

app的退出檢測是很難的,但是獲取app“要退出”的狀態就容易多了,退出的瞬間並不是真的退出了,ActivityManager要銷毀activity,也需要一些時間和資源的。
先見下面的運行效果:
技術分享

gif做的比價粗啊,
兩個activity的界面就不介紹了,主要是在APP啟動的時候開啟一個服務,application代碼如下:

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Intent intent
=new Intent(this,CheckExitService.class); getApplicationContext().startService(intent); } }

service的代碼如下:

public class CheckExitService extends Service {

    private String packageName = "test.minwenping.com.appexitdemo";


    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        
return null; } @Override public void onTaskRemoved(Intent rootIntent) { super.onTaskRemoved(rootIntent); Toast.makeText(CheckExitService.this, "App要退出了", Toast.LENGTH_SHORT).show(); } //service異常停止的回調 @Override public int onStartCommand(Intent intent, int
flags, int startId) { ActivityManager activtyManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activtyManager.getRunningAppProcesses(); for (int i = 0; i < runningAppProcesses.size(); i++) { if (packageName.equals(runningAppProcesses.get(i).processName)) { Toast.makeText(this, "app還在運行中", Toast.LENGTH_LONG).show(); } } return START_NOT_STICKY; } @Override public void onCreate() { super.onCreate(); Toast.makeText(CheckExitService.this, "App檢測服務開啟了", Toast.LENGTH_SHORT).show(); } }

還有嘗試了守護線程,UI就只有一個線程,想從這方面下手,但是都失敗了

Android App退出檢測