我在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解决此问题吗?
答案 0 :(得分:0)
上
实际上,我通过使用Messenger-实例来解决通过Activity-Service的消息传递,而没有从OnBind方法返回IBinder的Messenger实例,而是通过在启动服务的意图内传递Messenger的实例。
但是我更喜欢使用onBind方法来更改它,就像我对经典的“ Service”类所做的那样。 什么时候可以解决?