Я сделал приложение, которое периодически запускает службу, которая извлекает информацию с сервера.
Я использую 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)
Просто для какой-то информации, я не могу понять, почему, сообщение бросает:
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);
status -2147483648 = 0x800000000
Он возвращается из 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
NULL,
MDataChannel, инициализированный в конструкторе
DisplayEventReceiver::DisplayEventReceiver() { sp<ISurfaceComposer> sf(ComposerService::getComposerService()); if (sf != NULL) { mEventConnection = sf->createDisplayEventConnection(); if (mEventConnection != NULL) { mDataChannel = mEventConnection->getDataChannel(); } } }
Поэтому sf SurfaceComposer имеет значение NULL или sf-> createDisplayEventConnection возвращает NULL.
И в файле ./system/core/include/utils/Errors.h
... 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, ...
Кажется, статус должен NO_INIT
…