อัปเดต :ฉันไม่พบวิธีแก้ปัญหาที่แท้จริง สิ่งที่ฉันได้เกิดขึ้นคือวิธีการเชื่อมต่อกับอุปกรณ์บลูทู ธ ก่อนหน้าโดยอัตโนมัติทุกครั้งที่การเชื่อมต่อขาดหายไป มันไม่เหมาะ แต่ดูเหมือนว่าจะทำงานได้ดีพอสมควร ฉันชอบที่จะได้ยินคำแนะนำเพิ่มเติมเกี่ยวกับเรื่องนี้
ฉันมีปัญหาเดียวกันกับในคำถามนี้: บริการถูกฆ่าในขณะที่กด Wake Lock และหลังจากเรียก startForegroundรวมถึงอุปกรณ์ (Asus Transformer) ระยะเวลาก่อนหยุดให้บริการ (30-45 นาที) การใช้งาน ล็อคการปลุกการใช้ startForeground () และความจริงที่ว่าปัญหาจะไม่เกิดขึ้นหากแอปเปิดอยู่เมื่อหน้าจอดับลง
แอปของฉันรักษาการเชื่อมต่อบลูทู ธ กับอุปกรณ์อื่นและส่งข้อมูลระหว่างทั้งสองดังนั้นจึงต้องเปิดใช้งานตลอดเวลาเพื่อฟังข้อมูล ผู้ใช้สามารถเริ่มและหยุดบริการได้ตามต้องการและในความเป็นจริงนี่เป็นวิธีเดียวที่ฉันได้ดำเนินการเพื่อเริ่มหรือหยุดบริการ เมื่อบริการรีสตาร์ทการเชื่อมต่อบลูทู ธ กับอุปกรณ์อื่นจะขาดหายไป
ตามคำตอบในคำถามที่เชื่อมโยง startForeground () "ลดโอกาสที่บริการจะถูกฆ่า แต่ไม่ได้ป้องกัน" ฉันเข้าใจว่าเป็นเช่นนั้นอย่างไรก็ตามฉันได้เห็นตัวอย่างของแอพอื่น ๆ ที่ไม่มีปัญหานี้ (เช่นทาซเคอร์)
ประโยชน์ของแอปของฉันจะลดลงอย่างมากหากไม่มีความสามารถในการให้บริการจนกว่าผู้ใช้จะหยุดทำงาน มีวิธีใดบ้างที่จะหลีกเลี่ยงสิ่งนี้ ???
ฉันเห็นสิ่งนี้ในบันทึกของฉันเมื่อใดก็ตามที่บริการหยุด:
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}
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)
สิ่งเหล่านี้ดูเหมือนจะแสดงบริการกำลังทำงานอยู่เบื้องหน้า