업데이트 : 문제에 대한 진정한 해결책을 찾지 못했습니다. 내가 생각 해낸 것은 연결이 끊어 질 때마다 이전 블루투스 장치에 자동으로 다시 연결하는 방법이었습니다. 이상적이지는 않지만 상당히 잘 작동하는 것 같습니다. 나는 이것에 관한 더 많은 제안을 듣고 싶습니다.
나는이 질문에서와 거의 같은 문제가 있습니다 : wake lock을 유지하는 동안 서비스가 종료되고 장치 (Asus Transformer)를 포함하여 startForeground 를 호출 한 후 서비스가 중지되기까지의 시간 (30-45 분), 사용 wake lock, 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
편집 : 또한 내가 연결된 다른 장치에서는 발생하지 않는 것 같습니다 : Cyanogen을 실행하는 HTC Legend
편집 : 다음은 출력입니다 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}
All Connections:
ConnectionRecord{40a76920 com.howettl.textab/.TexTabService:@40b998b8}
그리고 출력 adb shell dumpsys activity
:
* TaskRecord{40f5c050 #23 A com.howettl.textab}
numActivities=1 rootWasReset=false
affinity=com.howettl.textab
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.howettl.textab/.TexTab}
realActivity=com.howettl.textab/.TexTab
lastActiveTime=4877757 (inactive for 702s)
* Hist #1: ActivityRecord{40a776c8 com.howettl.textab/.TexTab}
packageName=com.howettl.textab processName=com.howettl.textab
launchedFromUid=2000 app=ProcessRecord{40bb0098 2995:com.howettl.textab/10104}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.howettl.textab/.TexTab }
frontOfTask=true task=TaskRecord{40f5c050 #23 A com.howettl.textab}
taskAffinity=com.howettl.textab
realActivity=com.howettl.textab/.TexTab
base=/data/app/com.howettl.textab-1.apk/data/app/com.howettl.textab-1.apk data=/data/data/com.howettl.textab
labelRes=0x7f060000 icon=0x7f020000 theme=0x0
stateNotNeeded=false componentSpecified=true isHomeActivity=false
configuration={ scale=1.0 imsi=0/0 loc=en_CA touch=3 keys=2/1/1 nav=1/2 orien=L layout=0x10000014 uiMode=0x11 seq=6}
launchFailed=false haveState=true icicle=Bundle[mParcelledData.dataSize=1644]
state=STOPPED stopped=true delayedResume=false finishing=false
keysPaused=false inHistory=true visible=false sleeping=true idle=true
fullscreen=true noDisplay=false immersive=false launchMode=2
frozenBeforeDestroy=false thumbnailNeeded=false
connections=[ConnectionRecord{40a76920 com.howettl.textab/.TexTabService:@40b998b8}]
...
Proc #15: adj=prcp /F 40e75070 959:android.process.acore/10006 (provider)
com.android.providers.contacts/.ContactsProvider2<=Proc{40bb0098 2995:com.howettl.textab/10104}
Proc #16: adj=bak+2/F 40bb0098 2995:com.howettl.textab/10104 (foreground-service)
이는 서비스가 포 그라운드에서 실행되고 있음을 나타냅니다.