2017-08-05 26 views
0

中死亡(在最近的應用程序中滑動),如標題所述,我想知道是否有可能讓BroadcastReceiver知道應用程序是否被殺死。Android:檢查應用程序是否在接收器

我試圖做到了這一點與ActivityManager.RunningAppProcessInfo:

ActivityManager.RunningAppProcessInfo myProcess = new ActivityManager.RunningAppProcessInfo(); 
    ActivityManager.getMyMemoryState(myProcess); 
    boolean isInForeground = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND; 
    boolean isInBackground = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_GONE; 
    boolean cached = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_CACHED; 
    boolean perceptile = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_PERCEPTIBLE; 
    boolean sleeping = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_TOP_SLEEPING; 
    boolean service = myProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE; 

但沒有這些屬性可以告訴我,如果我的應用程序還活着,他們只能給我的提示。

通常我會用getRunningTask(我知道這是不建議使用):

ActivityManager manager = (ActivityManager) mActivity.getSystemService(ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager.getRunningTasks(100); 
    for(int i = 0; i < runningTaskInfo.size(); i++) { 
     ComponentName componentInfo = runningTaskInfo.get(i).topActivity; 
     if(componentInfo.getPackageName().equals(packageName)){ 
      return true; 
     } 
    } 

但對於這個解決方案,我需要,我沒有一個活動,我不能創建(也許你有一個想法)?

所以我的問題:是否有可能知道你的應用程序是否被殺害?

感謝

回答

1

像這樣創建一個新的服務,

public class FinalizingOperationsService extends Service { 

     @Override 
     public IBinder onBind(Intent intent) { 
      return null; 
     } 

     @Override 
     public int onStartCommand(Intent intent, int flags, int startId) { 
      Log.d("FOService", "Service Started"); 
      return START_NOT_STICKY; 
     } 

     @Override 
     public void onDestroy() { 
      super.onDestroy(); 
      Log.d("FOService", "Service Destroyed"); 
     } 

     @Override 
     public void onTaskRemoved(Intent rootIntent) { 
      Log.e("FOService", "Service Ends"); 
      // write server updation code here 
      // after completing code perform stopself() to stop this service; 
     } 
    } 

,並確定在這樣的清單文件這項服務,

<service android:name=".FinalizingOperationsService" android:stopWithTask="false"/> 

然後在你的項目中創建一個應用程序類和開始此類服務

public class MyApplication extends Application 
    { 

     @Override 
     protected void attachBaseContext(Context context) { 
      super.attachBaseContext(context); 
     } 


     @Override 
     public void onCreate() 
     { 
      super.onCreate(); 
      Intent itent = new Intent(this, FinalizingOperationsService.class); 
      startService(itent); 
     } 
    } 

說明: onTaskRemoved()方法在應用程序被殺死或銷燬時調用,因此在此方法中,您可以執行最終操作。希望它能幫助你。

相關問題