2017-08-05 28 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()方法在应用程序被杀死或销毁时调用,因此在此方法中,您可以执行最终操作。希望它能帮助你。

相关问题