web-dev-qa-db-ger.com

Wie kann ich meinen Dienst Android ausführen, wenn der Bildschirm ausgeschaltet ist?

Wenn sich der Bildschirm ausschaltet, wird mein Anwendungsdienst angehalten.

Ich starte meinen Dienst mit dem folgenden Code:

if (mSharedPrefs.getBoolean("prefAutoUpdatesMain", false)) {
     Intent svc = new Intent(this, MyService.class);
     startService(svc);
}

Wie kann ich die Servicepause vermeiden?


Was ich in MyService tun muss, ist, einige Daten aus dem Internet herunterzuladen. Wenn ich den Prozess verstanden habe, muss ich folgen:

  1. Erwerben Sie wakeLock
  2. Daten herunterladen
  3. Lassen Sie wakeLock los

Beim Herunterladen der Datenmethode gibt es keinen Hinweis auf wakeLock, es ist die Anwendung, über die wakeLock verfügt, stimmt das?

Wecksperren werden standardmäßig als Referenz gezählt. Ich denke, es ist besser ein WakeLock ohne Referenzzählung, um es wirklich freizugeben, irre ich mich?

47
kristby

Ein teilweises WakeLock ist das, was Sie wollen. Es hält die CPU offen, auch wenn der Bildschirm ausgeschaltet ist.

Zu erwerben:

PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
wakeLock.acquire();

Loslassen:

wakeLock.release();

WakeLock unterstützt auch die Referenzzählung, sodass Sie möglicherweise mehrere Dinge in Ihrem Dienst haben, die eine Weckfunktion erfordern, und das Gerät in den Ruhezustand versetzt werden kann, wenn keine davon aktiv ist.

Dinge, auf die Sie achten sollten:

Wenn Sie die Referenzzählung verwenden, stellen Sie sicher, dass alle Steuerpfade in Ihrer Anwendung ordnungsgemäß erfasst/freigegeben werden.

Achten Sie auch darauf, WakeLocks selten und für kurze Zeit zu halten. Sie summieren sich hinsichtlich des Batterieverbrauchs. Erwerben Sie Ihr Schloss, erledigen Sie Ihre Geschäfte und geben Sie es so schnell wie möglich frei.

65
jscharf

Sie benötigen eine teilweise Wecksperre.

Ausführliches Beispiel hier in einer vorherigen Frage:

Wake Locks Android Service wiederkehrend

3
CL22

Ich benutze nur einen vergeblichen Service.

1
stefan