Cập nhật: Tôi chưa tìm thấy giải pháp thực sự cho vấn đề. Những gì tôi đã đưa ra là một phương pháp tự động kết nối lại với một thiết bị bluetooth trước đó bất cứ lúc nào kết nối bị mất. Nó không phải là lý tưởng, nhưng nó có vẻ hoạt động khá tốt. Tôi rất muốn nghe bất kỳ đề xuất thêm về điều này mặc dù.Dịch vụ Foreground bị giết bởi Android
Tôi gặp vấn đề tương tự như trong câu hỏi này: Service being killed while holding wake lock and after calling startForeground bao gồm thiết bị (Asus Transformer), thời gian trước khi ngừng dịch vụ (30-45 phút), sử dụng khóa đánh thức, sử dụng của startForeground(), và thực tế là vấn đề không xảy ra nếu ứng dụng được mở khi màn hình tắt.
Ứng dụng của tôi duy trì kết nối bluetooth với một thiết bị khác và gửi dữ liệu giữa hai thiết bị, vì vậy thiết bị phải luôn hoạt động mọi lúc để nghe dữ liệu. Người dùng có thể bắt đầu và ngừng dịch vụ theo ý muốn, và trên thực tế, đây là cách duy nhất tôi đã triển khai để bắt đầu hoặc ngừng dịch vụ. Khi dịch vụ khởi động lại, kết nối bluetooth với thiết bị khác bị mất.
Theo câu trả lời trong câu hỏi được liên kết, startForeground() "làm giảm khả năng dịch vụ bị giết, nhưng không ngăn chặn được". Tôi hiểu rằng đó là trường hợp, tuy nhiên tôi đã thấy nhiều ví dụ về các ứng dụng khác mà không có vấn đề này (Tasker, ví dụ).
Tính hữu ích của ứng dụng của tôi sẽ giảm đáng kể mà không có khả năng dịch vụ chạy cho đến khi người dùng dừng lại. Có cách nào để tránh điều này???
Tôi thấy điều này trong logcat của tôi bất cứ khi nào dịch vụ được dừng lại:
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
EDIT: Tôi cũng nên lưu ý, điều này dường như không xảy ra trên các thiết bị khác mà tôi đang kết nối với: HTC Legend chạy Xyanogen
EDIT: đây là sản phẩm của 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}
[email protected]
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}
Và đầu ra của 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)
Những xuất hiện để hiển thị các dịch vụ đang chạy trong foreground.
Hãy xem câu trả lời này - có thể phù hợp với bạn http://stackoverflow.com/a/21157035/624109 – Muzikant