1

是否有任何方法可以找到应用程序何时关闭(由用户或系统关闭),即应用程序只能由用户通过按下应用程序启动器图标重新启动。

我认为只有在从getRunningAppProcesses()中删除进程名称时,Android 系统才会广播任何 Intent 是可能的。

我已经阅读了关于 SO 的所有可能的问答,并且该问题与 ActivityLifecycle 无关。

4

2 回答 2

4

通常,等待用户“退出”应用程序是一个坏主意,因为:

  • 用户实际上并不存在该应用程序,他们只是将其留在活动堆栈中,稍后再返回。
  • 用户可能会在您的数据库更新期间执行任何操作,例如重新进入应用程序。
  • 如果没有非常老套的解决方案,您将无法真正检测到这一点;这是 API 的设计,因为您不需要做这些事情。

因此,我认为任何基于等待应用程序“死亡”的解决方案都是一个糟糕的解决方案。相反,您应该提出一个尊重应用程序语义的解决方案。例如,如果您在其内容提供者之一中输入数据,那么它应该处理一致性(例如,跨应用程序中的片段)。

于 2012-12-07T21:00:31.910 回答
2

嗯..您可以手动监视文件系统上的 /proc 以查看您关心的应用程序是否存在进程 ID。

从您的终端窗口尝试以下操作。例如 :

> MYPID=(`adb shell ps | grep com.mydomain.myapp | awk '{print $2}'`)
> adb shell [ -d /proc/$MYPID ] && echo "PID $MYPID Exists"

com.mydomain.myapp替换为您的应用程序包名称

有几个应用程序可用于监控 android 上的进程。看看http://code.google.com/p/android-os-monitor/

android-os-monitor 项目使用 JNI 层来实现与 /proc 的交互 http://code.google.com/p/android-os-monitor/source/browse/OSMonitor/jni/process.c?repo=渗透压监测器

http://code.google.com/p/android-os-monitor/source/browse/OSMonitor/src/com/eolwral/osmonitor/JNIInterface.java?repo=osmonitor

http://code.google.com/p/android-os-monitor/source/browse/OSMonitor/src/com/eolwral/osmonitor/processes/ProcessList.java?repo=osmonitor

于 2012-12-07T20:39:45.850 回答