Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在application.onCreate()中发送BroadcastIntent会导致永远启动_Android_Android Intent_Android Broadcast_Cyanogenmod - Fatal编程技术网

Android 在application.onCreate()中发送BroadcastIntent会导致永远启动

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

我正在为基于CM12.1的硕士论文开发一个定制的android

自定义rom的用例是捕获任意应用的使用数据,包括启动、关闭和调用不同的系统资源。所有这些都应该在正常使用手机时发生。目前我想利用Application类,以便它在onCreate()方法中发送广播意图

这样我就可以记录应用程序启动的确切时间,但遗憾的是,我的方法导致设备无法再启动。在刷新自定义图像和引导后,我被困在cyanogen引导动画(正在设置动画,它没有冻结)。工作图像离开动画并在大约2分钟后启动android(也是flash后第一次启动),但my rom with customized Application.java在>15分钟后仍显示启动动画

我知道可以使用ActivityManager定期检查正在运行的应用程序,但由于这是不准确的,并且会阻止cpu进入节能模式,因此我想使用这种方法

如果我的评论超过了发送广播,一切都正常。所以我想问题是ActivityManagerActive尚未运行,但我对此不确定

由于我无法使用adb获取日志,我不知道在哪一点/启动失败的原因

您能告诉我如何检查是否满足发送请求的所有先决条件吗? 或者,只有在设备启动过程完成并扫描相应BroadcastReceiver中所有打开的应用程序时,我才能发送我的意图,但我不知道如何(甚至不知道是否可能)检查启动过程是否完成


提前谢谢。

好的,我可以解决这个问题

幸运的是,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());