我需要在Android中创建一个不断监听UDP消息(广播或单播)的服务。服务需要一直工作,永远不会死。
我坚持使用的当前解决方案 - 使用startWakefulService通过 WakefulBroadcastReceiver 启动的服务。 Receiver以编程方式注册在应用程序的主要活动中,即启动服务。 另外,为防止服务被杀死或暂停,我使用 START_STICKY 和大量 WakeLock (以防止CPU入睡), WifiLock s (防止wifi模块入睡)和 MulticastLock (防止在设备屏幕被锁定时阻止UDP广播)。我有唤醒锁的主要问题 - 我不知道我需要从哪个线程创建它(当前服务启动单独的线程接收UDP数据包,所以现在我从我拥有的每个线程创建它们)。我知道唤醒锁可以产生的电池消耗,但这并不重要,因为在我的情况下,设备将几乎不断充电。
我目前遇到的主要问题 - 手机在屏幕锁定一段时间后仍然停止接收广播(我也认为是单播)(我在三星Galaxy S7上测试了我的解决方案和 S6 )。所以,问题是 - 如何通过任何可能的方式永久保持CPU和网络的活力?