我在IntentJobServices / JobServices中转换了所有的IntentJobServices/服务,这样我的应用程序就可以兼容所有的安全策略。
但是我有一个问题要绑定并启动我的JobIntentService.我需要启动IntentJob,然后绑定到它,但是当我这样做时:
MyJobIntentService.enqueueWork(...)只有我的'onBind‘服务会被调用,而'onHandleWork’永远不会被调用。
我尝试了静态方法"enqueueWork“的JobIntentService和我的上下文,但没有一个正确的工作.此外,我阅读并测试了这里关于这个问题的所有主题,但是没有一个给我一个好的解决方案.
为了解决我的问题我做了:
@Override @Nullable
public IBinder onBind(@NonNull Intent intent) {
super.onBind(intent);
new Thread(
() -> onHandleWork(intent)
).start();
initMessageManager();
return this.mMessenger.getMsgReceiver().getBinder();
}我的JobIntentService和绑定活动都有一个Messenger发件人和接收器来通信同步状态信息.因此,在我的活动中,我必须将IBinder返回到我发起的服务的信使到ServiceConnection,所以现在我这样做是为了让事情正常工作。但是,如果我的活动被终止,绑定的活动有一个泄漏的ServiceConnection,它会抛出一个异常并停止我的服务。我正试图解决这个问题,也许我是通过在我的活动被破坏时解除我的服务来解决这个问题的。
这是解决这个问题的好办法,还是有更好的办法?
就我个人而言,我不喜欢在onBind中启动线程,因为我的onHandleWork从来没有被调用过安卓版本的>= 8.0,而在安卓版本中,JobIntentService工作得很好,因为如果我为JobService排队,它会调用onHandleWork,如果我绑定它,它会调用onBind。那么,有没有更好的方法来解决这个问题呢?
谢谢,有一个不错的编码!:D再见!
编辑:是的,对不起,我的语法错误,但我在工作,我不给.关于xD,无论如何,"onPause“或"onDestroy”生命周期方法上的“解除绑定”不起作用.因为当我调用解除绑定的服务时,停止工作,如果可能的话,我需要它仍然运行。有什么建议吗? 他们会用JobIntentService解决这个问题吗?
发布于 2019-08-01 08:49:38
向上
实际上,我正在通过Activity解决消息传递问题,方法是使用一个没有从IBinder方法返回的OnBind的Messenger实例,而是将Messenger的实例传递到启动服务的意图中。
但是我更喜欢使用onBind方法来改变它,就像我对经典的“服务”类所做的那样。这事什么时候才能解决?
https://stackoverflow.com/questions/55812015
复制相似问题