更新:我还没有找到问题的真正解决方案。我所做的是一种在连接丢失时自动重新连接到以前的蓝牙设备的方法。它并不理想,但似乎运作得相当好。我很想听到有关这个的更多建议。
我遇到的问题与此问题大致相同:服务在被唤醒时被杀死并且在调用startForeground之后包括设备(Asus Transformer),服务停止前的时间长度(30-45分钟),使用唤醒锁定,startForeground()的使用,以及当屏幕熄灭时应用程序打开时不会发生问题的事实。
我的应用程序维护与另一台设备的蓝牙连接,并在两者之间发送数据,因此它必须始终处于活动状态以侦听数据。用户可以随意启动和停止服务,实际上这是我实现启动或停止服务的唯一方法。服务重新启动后,与其他设备的蓝牙连接将丢失。
根据链接问题中的答案,startForeground()“降低了服务被杀的可能性,但并未阻止它”。我理解是这样的,但是我已经看到很多其他应用程序没有这个问题的例子(例如,Tasker)。
如果服务能够在用户停止之前运行,我的应用程序的实用性将大大降低。有什么方法可以避免这个???
每当服务停止时,我都会在logcat中看到这个:
ActivityManager: No longer want com.howettl.textab (pid 32321): hidden #16
WindowManager: WIN DEATH: Window{40e2d968 com.howettl.textab/com.howettl.textab.TexTab paused=false
ActivityManager: Scheduling restart of crashed service com.howettl.textab/.TexTabService in 5000ms
编辑:我还应该注意,这似乎没有出现在我连接的其他设备上:HTC Legend运行Cyanogen
编辑:这是输出adb shell dumpsys activity services:
* ServiceRecord{40f632e8 com.howettl.textab/.TexTabService}
intent={cmp=com.howettl.textab/.TexTabService}
packageName=com.howettl.textab
processName=com.howettl.textab
baseDir=/data/app/com.howettl.textab-1.apk
resDir=/data/app/com.howettl.textab-1.apk
dataDir=/data/data/com.howettl.textab
app=ProcessRecord{40bb0098 2995:com.howettl.textab/10104}
isForeground=true foregroundId=2 foregroundNoti=Notification(contentView=com.howettl.textab/0x1090087 vibrate=null,sound=null,defaults=0x0,flags=0x6a)
createTime=-25m42s123ms lastActivity=-25m42s27ms
executingStart=-25m42s27ms restartTime=-25m42s124ms
startRequested=true stopIfKilled=false callStart=true lastStartId=1
Bindings:
* IntentBindRecord{40a02618}:
intent={cmp=com.howettl.textab/.TexTabService}
binder=android.os.BinderProxy@40a9ff70
requested=true received=true hasBound=true doRebind=false
* Client AppBindRecord{40a3b780 ProcessRecord{40bb0098 2995:com.howettl.textab/10104}}
Per-process Connections:
ConnectionRecord{40a76920 com.howettl.textab/.TexTabService:@40b998b8}
jeck猫
海绵宝宝撒
慕容森
相关分类