如何在android上检测应用程序退出?

如何在应用程序退出时执行一些代码?我想在应用程序退出时删除临时数据.通过应用程序退出我的意思是应用程序没有在后台运行最小化,它完全消失.

我试图使服务在单独的进程中运行,服务正在检查应用程序进程是否未运行它应该删除临时文件夹.使用此方法,临时文件夹并不总是被删除,因为进程仍以最低优先级运行.

我无法在OnDestroy()中执行此操作.

服务代码:

[Service(Process = "com.lobomonitor")]
[IntentFilter(new string[] { "com.androidgui.ProcessMonitorService" })]
public class ProcessMonitorService : Service
{
    public override StartCommandResult OnStartCommand(Intent intent,StartCommandFlags flags,int startId)
    {
        Thread processThread = new Thread(() =>
                                          {
                                              ActivityManager actManager = (ActivityManager) this.GetSystemService(ActivityService);
                                              while (true)
                                              {
                                                  Thread.Sleep(1000);
                                                  IList<ActivityManager.RunningAppProcessInfo> procList = actManager.RunningAppProcesses;
                                                  procList.Any(i => i.ProcessName.Equals("com.androidgui"));
                                                  if (!procList.Any(i => i.ProcessName.Equals("com.androidgui")))
                                                  {
                                                          FolderManager.Singleton.DeleteTempFolder();
                                                          break;
                                                  }
                                              }
                                          });
        processThread.Start();
        return StartCommandResult.RedeliverIntent;
    }

    public override IBinder OnBind(Intent intent)
    {
        return null;
    }
}

解决方法

我不知道是否有帮助,但如果你杀了你的应用程序,那么运行在后台调用方法中的服务:
@Override
public void onTaskRemoved(Intent rootIntent){

    super.onTaskRemoved(rootIntent);
}

例如,我曾经有一个运行服务的应用程序.当我杀了app – 服务也死了,但我想让它活着.通过使用onTaskRemoved,我能够安排重启服务:

@Override
public void onTaskRemoved(Intent rootIntent){
    Intent restartServiceIntent = new Intent(getApplicationContext(),this.getClass());
    restartServiceIntent.setPackage(getPackageName());

    PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(),1,restartServiceIntent,PendingIntent.FLAG_ONE_SHOT);
    AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    alarmService.set(
            AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime() + 1000,restartServicePendingIntent);

    super.onTaskRemoved(rootIntent);
}

效果是 – >我正在查看我的应用 – >服务看到正在删除任务并调用onTaskRemoved – >我计划在1秒内重启服务 – >服务模具 – >一秒后它醒来 – >结果:应用程序被杀死,我执行了重新启动我的服务的代码,因此它仍然在后台运行(仅在首选项中可见 – >应用程序作为进程)

http://developer.android.com/reference/android/app/Service.html

void     onTaskRemoved(Intent rootIntent)

如果服务当前正在运行且用户已从服务的应用程序中删除了任务,则会调用此方法.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...