2016-04-21 5 views
0

Meine Frage ist ein Schuss in die Dunkelheit: Was ist der Deal mit Android 4.x/Jelly Bean? Gibt es bekannte Probleme mit Diensten, Klebrigkeit, Vordergrund usw.?Gibt es bekannte Probleme mit Android Services auf 4.1.x (Jelly Bean)?

Hintergrundgeschichte: Ich habe meine Musik-Player-Anwendung erfolgreich auf allen Arten von Android-Geräten und Emulatoren getestet und dann erst kürzlich auf einem physischen Jelly Bean-Gerät (Samsung Rugby Pro). Ich fand, dass die MediaPlayeronCompletion Funktion ist nicht wird konsequent ausgelöst, wenn der Bildschirm ausgeschaltet ist. Meistens ist es nicht für mehrere Minuten gefeuert. Wenn der Bildschirm aktiviert ist, funktioniert die Anwendung problemlos, unabhängig davon, ob meine Aktivität angezeigt wird oder nicht.

(. Es gibt keine Probleme auf Lebkuchen, KitKat, Lutscher, oder Eibisch Ich habe physische Geräte für diese Versionen und sie alle arbeiten einwandfrei.)

Geräteinformationen:

  • OS VERSION : 3.0.31-656355
  • RELEASE: 4.1.1
  • DEVICE: comancheatt
  • MODELL: SAMSUNG-SGH-I547
  • PRODUCT: comancheuc
  • Marke: Samsung
  • DISPLAY: JRO03L.I547UCBLL1
  • CPU_ABI: armeabi-V7A
  • CPU_ABI2: armeabi
  • HARDWARE: QCOM
  • ID: JRO03L
  • HERSTELLER : samsung
  • USER: se.infra
  • HO ST: SEP-125
+0

Ist dies ein gebundener Dienst oder ein gestarteter Dienst? – Pomagranite

+0

Der Dienst wird gestartet und gebunden an die Aktivität "onResume" und anschließend an "onPause". Wenn der Dienst nicht verwendet wird, wird er in 'onPause' ebenfalls gestoppt. –

+0

http://developer.android.com/guide/components/services.html – Pomagranite

Antwort

0

Ich habe das herausgefunden; Ich hoffe, das hilft Ihnen auch ...

Das Problem ist nicht in Brennen des onCompletion Ereignis, sondern eher, dass reset() Blöcke auf unbestimmte Zeit. Ich hatte dies vorher Android issue #959: MediaPlayer "crash" (deadlocks the calling thread) when resetting or releasing an unused MediaPlayer zugeschrieben, was für meinen Fall falsch war.

Mein besonderes Problem war aggressives Schlafverhalten auf meinem Testgerät. Dieser Fehler würde auftauchen, wenn ich im Flugmodus mit einigen anderen Anwendungen lief, weil der Aufruf reset() (oder release()) auch die Instanz WakeLock freigibt. Sobald dies geschehen ist, würde das Gerät schlafen und der Code scheint in dieser Funktion zu blockieren. Ich konnte dies nicht mit einem angehängten und/oder eingesteckten Debugger reproduzieren, da beide das Gerät daran hinderten, zu schlafen!

Meine Lösung war zu erstellen separat WakeLock verwaltet, die ich acquire() im Grunde, wenn die Wiedergabe beginnt und release() nachdem alle Songs durchgespielt haben.Technisch mache ich das nur, wenn die Aktivität pausiert wurde und auch wieder freigegeben wird, weil es unnötig ist, eine WakeLock zu halten, wenn das Gerät bereits wach ist.

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyTag"); 
wakeLock.acquire(); 
Verwandte Themen