Custom JobIntentService onHandleWork not called

前端 未结 12 1242
-上瘾入骨i
-上瘾入骨i 2020-12-09 08:27

I recently was updating an app that I work on to handle notifications from push using a JobIntentService instead of a regular IntentService because

12条回答
  •  半阙折子戏
    2020-12-09 08:43

    I finally found the solution for that problem LoL

    If you Override the "onBind" method and u call the work using the "enqueueWork" method you need to return the bind to the engine of the work doing this:

    @Override @Nullable
        public IBinder onBind(@NonNull Intent intent) {
            [... Do What You Want ... ]
            return super.onBind(intent);
        }
    

    So returning the IBinder of the "super.onBind" method, so you must use that to bind to the JobIntentService.

    If you want to bind and return another binder you can do that:

    @Override @Nullable
        public IBinder onBind(@NonNull Intent intent) {
            IBinder binder = initSynchronizer();
            new Thread(
                    () -> onHandleWork(intent)
                ).start();
            return binder;
        }
    

    So by starting you "onHandleWork" in another Thread. This way you can use:

    "bindService(....., JobIntentService.BIND_AUTO_CREATE);"

    to bind to the service and return your Binder. Anyway when you unbind from the service the service will get killed, and if it still run you cannot bind again to it because the service got killed but the thread in which the "onHandleWork" is still running...

    So I suggest you to use this version only if you have to do a task which need to communicate with the activity until it is alive and need to still working if the activity get killed (without the possibility to bind again the jobService, but only to start a new one...)

    To don't kill the service after the unbind you need to start it in "foreground" the "stopForeground" in the "onDestroy". This way you service still be alive just for the thread which is handling the "onHandleWork" methods.

    I hope google's will solve this sh*t fast LoL, I converted all the older "Service" and "IntentService" to the new one jobs but... they work really worst than before!

    Bye have a nice coding ;)

提交回复
热议问题