Android 在application.onCreate()中发送BroadcastIntent会导致永远启动
我正在为基于CM12.1的硕士论文开发一个定制的android 自定义rom的用例是捕获任意应用的使用数据,包括启动、关闭和调用不同的系统资源。所有这些都应该在正常使用手机时发生。目前我想利用Application类,以便它在onCreate()方法中发送广播意图 这样我就可以记录应用程序启动的确切时间,但遗憾的是,我的方法导致设备无法再启动。在刷新自定义图像和引导后,我被困在cyanogen引导动画(正在设置动画,它没有冻结)。工作图像离开动画并在大约2分钟后启动android(也是flash后第一次启动),但my rom with customized Application.java在>15分钟后仍显示启动动画 我知道可以使用ActivityManager定期检查正在运行的应用程序,但由于这是不准确的,并且会阻止cpu进入节能模式,因此我想使用这种方法 如果我的评论超过了发送广播,一切都正常。所以我想问题是ActivityManagerActive尚未运行,但我对此不确定 由于我无法使用adb获取日志,我不知道在哪一点/启动失败的原因 您能告诉我如何检查是否满足发送请求的所有先决条件吗? 或者,只有在设备启动过程完成并扫描相应BroadcastReceiver中所有打开的应用程序时,我才能发送我的意图,但我不知道如何(甚至不知道是否可能)检查启动过程是否完成Android 在application.onCreate()中发送BroadcastIntent会导致永远启动,android,android-intent,android-broadcast,cyanogenmod,Android,Android Intent,Android Broadcast,Cyanogenmod,我正在为基于CM12.1的硕士论文开发一个定制的android 自定义rom的用例是捕获任意应用的使用数据,包括启动、关闭和调用不同的系统资源。所有这些都应该在正常使用手机时发生。目前我想利用Application类,以便它在onCreate()方法中发送广播意图 这样我就可以记录应用程序启动的确切时间,但遗憾的是,我的方法导致设备无法再启动。在刷新自定义图像和引导后,我被困在cyanogen引导动画(正在设置动画,它没有冻结)。工作图像离开动画并在大约2分钟后启动android(也是flash
提前谢谢。好的,我可以解决这个问题 幸运的是,android也想知道系统何时启动。 类
ActivityManagerService
有一个finishBooting()
函数,该函数设置一个标志mCallFinishBooting
。因此,为这个标志添加一个getter是解决方案的一部分。我还将此getter添加到IActivityManager
接口。剩下的问题是ActivityManagerProxy
(可以在ActivityManagerNative.java中找到),它实现了接口,但没有finishBooting()
方法
一些测试表明,ActivityManagerProxy
在引导期间没有使用,因此这里的getter总是返回true
因此,通过使用下面的代码,我可以在引导过程完成后,在应用程序启动时为每个应用程序发送广播。我不确定是否需要检查null
if (ActivityManagerNative.getDefault() != null && ActivityManagerNative.getDefault().isCallFinishBooting())
getApplicationContext().sendBroadcastAsUser(intent, android.os.Process.myUserHandle());
好的,我可以解决这个问题 幸运的是,android也想知道系统何时启动。 类
ActivityManagerService
有一个finishBooting()
函数,该函数设置一个标志mCallFinishBooting
。因此,为这个标志添加一个getter是解决方案的一部分。我还将此getter添加到IActivityManager
接口。剩下的问题是ActivityManagerProxy
(可以在ActivityManagerNative.java中找到),它实现了接口,但没有finishBooting()
方法
一些测试表明,ActivityManagerProxy
在引导期间没有使用,因此这里的getter总是返回true
因此,通过使用下面的代码,我可以在引导过程完成后,在应用程序启动时为每个应用程序发送广播。我不确定是否需要检查null
if (ActivityManagerNative.getDefault() != null && ActivityManagerNative.getDefault().isCallFinishBooting())
getApplicationContext().sendBroadcastAsUser(intent, android.os.Process.myUserHandle());