Исключение нулевого указателя в JobIntentService onDestroy - PullRequest
0 голосов
/ 20 ноября 2018

У меня проблема с JobIntentService в ОС Android 8.1 с подписанным apk. Где, как это работает нормально с отладочной версией. Пробовал с несколькими вещами, но не смог найти решение для этого. Вот журнал сбоев, который я получил от Crashalytics.

java.lang.RuntimeException: Unable to stop service com.app.xmpp.XmppService@241c51c6: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.JobIntentService$WorkEnqueuer.serviceProcessingFinished()' on a null object reference

        at android.app.ActivityThread.handleStopService(ActivityThread.java:3284)

        at android.app.ActivityThread.access$2300(ActivityThread.java:188)

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1633)

        at android.os.Handler.dispatchMessage(Handler.java:111)

        at android.os.Looper.loop(Looper.java:210)

        at android.app.ActivityThread.main(ActivityThread.java:5839)

        at java.lang.reflect.Method.invoke(Native Method)

        at java.lang.reflect.Method.invoke(Method.java:372)

        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113)

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879)

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.JobIntentService$WorkEnqueuer.serviceProcessingFinished()' on a null object reference
        at android.support.v4.app.JobIntentService.onDestroy(JobIntentService.java:479)
        at com.app.xmpp.XmppService.onDestroy(XmppService.java:91)
        at android.app.ActivityThread.handleStopService(ActivityThread.java:3265)
        at android.app.ActivityThread.access$2300(ActivityThread.java:188) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1633) 
        at android.os.Handler.dispatchMessage(Handler.java:111) 
        at android.os.Looper.loop(Looper.java:210) 
        at android.app.ActivityThread.main(ActivityThread.java:5839) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879) 

Помогите мне, если кто-нибудь сталкивался с подобными проблемами с JobIntentService.

Обратите внимание, что эта проблема не может быть решена с помощью обработки исключения Nullpointer, поскольку NPE происходит в JobIntentService, который является частью Android Framework, и мы не можем его изменить, а это , в частности, происходит только в Signed APK.

XMPP Сервис OnDestroy

@Override
    public void onDestroy() {
        super.onDestroy();

        MyXMPP.instance=null;
        MyXMPP.instanceCreated=false;

        MyXMPP.connection.disconnect();
        xmppConnectionCheckHandler.removeCallbacks(xmppConnectionCheckRunnable);

        System.out.println("--------------Xmpp Service Stopped-----------");
    }

Заранее спасибо.

1 Ответ

0 голосов
/ 20 ноября 2018

С JobIntentService класс:

@Override
public void onDestroy() {
    super.onDestroy();
    if (mCompatQueue != null) {
        synchronized (mCompatQueue) {
            mDestroyed = true;
            mCompatWorkEnqueuer.serviceProcessingFinished(); //line 479
        }
    }
}

@Override
public void onCreate() {
    super.onCreate();
    if (DEBUG) Log.d(TAG, "CREATING: " + this);
    if (Build.VERSION.SDK_INT >= 26) {
        mJobImpl = new JobServiceEngineImpl(this);
        mCompatWorkEnqueuer = null;
    } else {
        mJobImpl = null;
        ComponentName cn = new ComponentName(this, this.getClass());
        mCompatWorkEnqueuer = getWorkEnqueuer(this, cn, false, 0);
    }
}

Вы выполняете какие-либо манипуляции с mCompatWorkEnqueuer или mCompatQueue в своем подклассе?Скажем, как установить его на null или super.onCreate() вызов?


Обратите внимание, что выполнение строки 479 зависит от существования значения mCompatQueue.Также mCompatWorkEnqueuer установлен на null в onCreate для API 26 (8.0) и выше

...