我正在将一个已有4年历史的Android应用移植到最新的Android API(28)上,并且遇到了严重的问题,我不知道该如何解决。应用程序代码在这里:https://github.com/briggsm/ToWF-Android。
代码的组织是这样:
我有一个产生的MainActivity(AppCompatActivity的子类(来自android.support.v7.app.AppCompatActivity;))
InfoService,IntentService的子类以及
NetworkPlaybackService,IntentService的子类
每个服务(在onHandleIntent()中)都会打开一个套接字以连接到服务器。然后,它们都进入一个“永久”循环,等待套接字并处理数据包并定期发送响应。
当MainActivity获取onPause()然后再出现onStop()事件(因为屏幕变黑)时,我的服务立即报告它们正在获取SocketTimeoutExceptions。
该代码似乎可以正确地创建和获取()WiFi锁定-尽管这三个部分中只有其中之一-NetworkPlaybackService。 (由于每个服务都打开了套接字,每个服务都应该获得锁定吗?)此外,NetworkPlaybackService会创建并获取唤醒锁。
请注意,该代码并未明确将服务“置于后台”。我不确定这是否重要,或者真的怎么做。
在线咨询似乎表明该代码不应使用IntentService,而应使用JobIntentService或类似的东西。
在进行大量更改之前,我想知道为什么为什么当前台MainActivity暂停时服务正在获得Socket超时...是否有确定的方法可以找到这个? / p>
谢谢。
维克