我在 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 来传达同步状态信息......所以我必须将 IBinder 返回到我启动的 Service 的 Messenger 到我的 Activity 中的 ServiceConnection,所以现在我这样做是为了让事情正常进行...但是,如果我的活动被杀死,则绑定的活动有一个泄漏的 ServiceConnection,它会引发异常并停止我的服务。我正在尝试解决这个问题,也许我解决了这个问题,当我的活动被破坏时解除绑定我的服务..
这是解决这个问题的好方法还是有更好的方法?
就我个人而言,我不喜欢在 onBind 中启动线程,因为我的 onHandleWork 从未在 Android 版本 >= 8.0 上调用过,在 Android 版本 < 8.0 中,JobIntentService 运行良好,因为如果我将 JobService 加入队列,它会调用 onHandleWork,它会调用 onBind如果我绑定它。那么有没有更好的方法来解决这个问题呢?
谢谢,祝你编码愉快!:D 再见!
编辑:是的,对不起我的语法错误,但我在工作,我没有给出...关于那个 xD 无论如何,“onPause”或“onDestroy”生命周期方法上的“unbind”不起作用.. . 因为当我调用 unbind 服务停止工作时,如果可能的话,我需要它仍然运行.. 有什么建议吗?
他们会用 JobIntentService 解决这个问题吗???