如何判断 Android 应用程序是否处于 "stopped" 状态?
How to tell if an Android app is in the "stopped" state?
我有一个 Android 应用程序,它注册了一个 BroadcastReceiver
来处理铃声模式更改。接收器是通过清单注册的,而不是动态注册的。一些用户报告说,尽管手动启动应用程序并随后更改铃声模式确实会触发该应用程序,但该应用程序偶尔不会响应铃声模式更改。然而,一段时间后,该应用程序再次停止响应铃声模式更改。
症状听起来很可疑,好像应用程序正在进入 "stopped" 状态;但我没有任何理由相信用户会明确强制关闭应用程序,而且我不知道应用程序可以进入 "stopped" 状态的任何其他方式。
有没有办法让用户确定他们(非 root)phone 上的应用程序是否处于停止状态,所以我可以 validate/invalidate "stopped" 状态理论?我认为仅查看 "force close" 按钮是否已启用是不够的,因为对于已停止的应用程序以及当前未启用的应用程序,它都会被禁用 运行.
您可以使用此代码查询设备上的所有应用程序并查看哪些应用程序处于停止状态:
private List<String> getStoppedPackages() {
ArrayList<String> stoppedPackages = new ArrayList<String>();
final PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
boolean appStopped = (packageInfo.flags & ApplicationInfo.FLAG_STOPPED) != 0;
if (appStopped) {
String description = packageInfo.packageName;
stoppedPackages.add(description);
}
}
return stoppedPackages;
}
我制作了一个实用应用程序,可以在此处为您执行此操作:
我有一个 Android 应用程序,它注册了一个 BroadcastReceiver
来处理铃声模式更改。接收器是通过清单注册的,而不是动态注册的。一些用户报告说,尽管手动启动应用程序并随后更改铃声模式确实会触发该应用程序,但该应用程序偶尔不会响应铃声模式更改。然而,一段时间后,该应用程序再次停止响应铃声模式更改。
症状听起来很可疑,好像应用程序正在进入 "stopped" 状态;但我没有任何理由相信用户会明确强制关闭应用程序,而且我不知道应用程序可以进入 "stopped" 状态的任何其他方式。
有没有办法让用户确定他们(非 root)phone 上的应用程序是否处于停止状态,所以我可以 validate/invalidate "stopped" 状态理论?我认为仅查看 "force close" 按钮是否已启用是不够的,因为对于已停止的应用程序以及当前未启用的应用程序,它都会被禁用 运行.
您可以使用此代码查询设备上的所有应用程序并查看哪些应用程序处于停止状态:
private List<String> getStoppedPackages() {
ArrayList<String> stoppedPackages = new ArrayList<String>();
final PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
boolean appStopped = (packageInfo.flags & ApplicationInfo.FLAG_STOPPED) != 0;
if (appStopped) {
String description = packageInfo.packageName;
stoppedPackages.add(description);
}
}
return stoppedPackages;
}
我制作了一个实用应用程序,可以在此处为您执行此操作: