JobIntentService onHandleWork无法正常工作

时间:2019-04-23 13:09:34

标签: android bind jobintentservice

我在IntentJobServices / JobServices中转换了我的所有IntentServices /服务,因此我的应用程序与所有安全策略兼容。

但是我在绑定和启动我的JobIntentService时遇到问题... 我需要启动IntentJob,然后绑定到它,但是当我这样做时:

MyJobIntentService.enqueueWork(...)

仅调用我的“ onBind”服务,而从未调用“ onHandleWork”。

我尝试了JobIntentService和Context的静态方法“ enqueueWork”,但是没有一个正常工作... 另外,我在Stackoverflow上阅读并测试了有关此问题的所有主题,但没有一个给我很好的解决方案...

为了解决我的问题,我做了:

@Override @Nullable
public IBinder onBind(@NonNull Intent intent) {
    super.onBind(intent);
    new Thread(
        () -> onHandleWork(intent)
    ).start();
    initMessageManager();
    return this.mMessenger.getMsgReceiver().getBinder();
}

我的JobIntentService和Binded Activity同时具有Messenger Sender和Receiver来传达同步状态信息... 因此,我必须在我的Activity中将IBinder返回到我发起的Service的Messenger到ServiceConnection,所以现在我要执行此操作以使事情正常进行... 但是,如果我的活动被杀死,则绑定活动的ServiceConnection泄漏,将引发异常并停止我的服务。 我正在尝试解决此问题,也许是通过在活动被破坏时解除对服务的绑定来解决的。

这是解决此问题的好方法还是有更好的方法?

我个人不喜欢在onBind上启动线程,因为我的onHandleWork从未在> = 8.0的Android版本上调用,在Android版本<8.0上,JobIntentService效果很好,因为如果我加入JobService并调用onHandleWork,它将调用onHandleWork如果我绑定它,则调用onBind。 那么有没有更好的方法来解决这个问题呢?

谢谢,祝您编码愉快! :D 再见!

  

编辑:是的,对不起我的语法错误,但是我在工作,但我没有   对xD给出一个...反正在“ onPause”上的“ unbind”或   “ onDestroy”生命周期方法不起作用...因为当我调用   取消绑定服务停止工作,如果可能的话,我仍然需要它   运行。有任何建议吗?

     

他们会用JobIntentService解决此问题吗?

1 个答案:

答案 0 :(得分:0)

实际上,我通过使用Messenger-实例来解决通过Activity-Service的消息传递,而没有从OnBind方法返回IBinder的Messenger实例,而是通过在启动服务的意图内传递Messenger的实例。

但是我更喜欢使用onBind方法来更改它,就像我对经典的“ Service”类所做的那样。 什么时候可以解决?