Android 未能初始化显示事件接收器

Android 未能初始化显示事件接收器,android,crash,Android,Crash,我制作了一个应用程序,定期启动从服务器检索信息的服务 我使用AlarmManager来安排服务。 这工作正常,应用程序每30分钟接收一次警报。 该应用程序工作正常,但经过一整晚的不活动-我启动了该应用程序,它崩溃了,错误为:“未能初始化显示事件接收器” 除此之外,这一切都是完美的 我搜索了这个问题很长时间,发现其他人也有同样的问题,但还没有解决办法 Process: it.unipi.iet.portolan.traceroute, PID: 13092 java.lang.RuntimeExc

我制作了一个应用程序,定期启动从服务器检索信息的服务

我使用AlarmManager来安排服务。
这工作正常,应用程序每30分钟接收一次警报。
该应用程序工作正常,但经过一整晚的不活动-我启动了该应用程序,它崩溃了,错误为:“未能初始化显示事件接收器”

除此之外,这一切都是完美的

我搜索了这个问题很长时间,发现其他人也有同样的问题,但还没有解决办法

Process: it.unipi.iet.portolan.traceroute, PID: 13092
java.lang.RuntimeException: Failed to initialize display event receiver.  status=-2147483648
at android.view.DisplayEventReceiver.nativeInit(Native Method)
at android.view.DisplayEventReceiver.<init>(DisplayEventReceiver.java:61)
at android.view.Choreographer$FrameDisplayEventReceiver.<init>(Choreographer.java:695)
at android.view.Choreographer.<init>(Choreographer.java:169)
at android.view.Choreographer.<init>(Choreographer.java:72)
at android.view.Choreographer$1.initialValue(Choreographer.java:98)
at android.view.Choreographer$1.initialValue(Choreographer.java:91)
at java.lang.ThreadLocal$Values.getAfterMiss(ThreadLocal.java:430)
at java.lang.ThreadLocal.get(ThreadLocal.java:65)
at android.view.Choreographer.getInstance(Choreographer.java:194)
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:370)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2871)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
at android.app.ActivityThread.access$800(ActivityThread.java:145)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5141)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
at dalvik.system.NativeStart.main(Native Method)
进程:it.unipi.iet.portolan.traceroute,PID:13092
java.lang.RuntimeException:未能初始化显示事件接收器。状态=-2147483648
在android.view.DisplayEventReceiver.nativeInit(本机方法)上
在android.view.DisplayEventReceiver(DisplayEventReceiver.java:61)
在android.view.Choreographer$FrameDisplayEventReceiver(Choreographer.java:695)
在android.view.Choreographer.(Choreographer.java:169)
在android.view.Choreographer.(Choreographer.java:72)
位于android.view.Choreographer$1.initialValue(Choreographer.java:98)
位于android.view.Choreographer$1.initialValue(Choreographer.java:91)
位于java.lang.ThreadLocal$Values.getAfterMiss(ThreadLocal.java:430)
位于java.lang.ThreadLocal.get(ThreadLocal.java:65)
位于android.view.Choreographer.getInstance(Choreographer.java:194)
在android.view.ViewRootImpl。(ViewRootImpl.java:370)
在android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)中
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
位于android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2871)
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
在android.app.ActivityThread.access$800(ActivityThread.java:145)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5141)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
在dalvik.system.NativeStart.main(本机方法)

只是为了一些信息我不明白为什么, 该消息来自:

frameworks/base/core/jni/android_view_DisplayEventReceiver.cpp:4239:        message.appendFormat("Failed to initialize display event receiver.  status=%d", status);
或者这个

frameworks/base/libs/androidfw/DisplayEventDispatcher.cpp:1427:        ALOGW("Failed to initialize display event receiver, status=%d", result);
状态-2147483648=0x80000000

它从DisplayEventReceiver返回:

  /* initCheck returns the state of DisplayEventReceiver after construction.*/

status_t initCheck() const;
然后查看DisplayEventReceiver.cpp

status_t DisplayEventReceiver::initCheck() const {
if (mDataChannel != NULL)
    return NO_ERROR;
return NO_INIT;
}
看起来
mDataChannel
为空

在构造函数中初始化的mDataChannel

DisplayEventReceiver::DisplayEventReceiver() {
    sp<ISurfaceComposer> sf(ComposerService::getComposerService());
    if (sf != NULL) {
        mEventConnection = sf->createDisplayEventConnection();
        if (mEventConnection != NULL) {
            mDataChannel = mEventConnection->getDataChannel();
        }
    }
}

似乎状态必须
NO_INIT

一个问题:在您的服务中,您引用的上下文是否正确?请在出现此错误的地方添加代码。@barq崩溃日志没有指向他的代码。我在安卓5.1.1上的应用程序也收到了回复。我正在使用Crashlytics,但仍然不知道它发生在哪里。然后提供有关如何重现此问题的最低设置。显示导致错误的相关代码。
https://android.googlesource.com/platform/frameworks/base/+/master/libs/androidfw/DisplayEventDispatcher.cpp
...
NO_ERROR            =0
UNKNOWN_ERROR       = (-2147483647-1), // INT32_MIN value

NO_MEMORY           = -ENOMEM,
INVALID_OPERATION   = -ENOSYS,
BAD_VALUE           = -EINVAL,
BAD_TYPE            = (UNKNOWN_ERROR + 1),
NO_INIT             = -ENODEV,
...