Hintergrund-Prozess timer auf android
Ich versuche, einen Prozess der timer zu laufen und es laufen im hintergrund auf android (startet mit einer Schaltfläche).
Muss der Zeitgeber auf 30 Sekunden und sollte auch weiterhin wachsende Anwendung im hintergrund (mit home-Taste und power /Bildschirm aus).
Wie kann ich dies tun? Ich habe versucht, mit service und handler aber nicht funktioniert ...
BEARBEITEN
Mein service-Verfolgung (Prozess-mit 30 Sek.),
public class TrackingService extends IntentService {
private Handler mHandler;
private Runnable mRunnable;
public TrackingService() {
super("TrackingService");
}
public TrackingService(String name) {
super(name);
}
@Override
protected void onHandleIntent(Intent intent) {
long timer = 30000;
mHandler = new Handler();
mRunnable = new Runnable() {
@Override
public void run() {
//TODO - process with update timer for new 30 sec
mHandler.postDelayed(this, timer);
}
};
mHandler.postDelayed(mRunnable, timer);
}
}
Meine klicken Sie auf die Schaltfläche:
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO - start first time and it continued every 30 seconds and continue in the background
startService(Intent intent = new Intent(this, TrackingService.class));
}
});
Herzlich willkommen auf StackOverflow ! Wenn Sie auf der Suche nach einer Antwort auf Ihre Frage, die Sie berücksichtigen sollten, geben Sie uns Ihren Ansatz zunächst, so können wir helfen, Sie verstehen, was Sie falsch macht/was zu tun ist.
Sie kann nicht laufen, alles auf einer ausgeschalteten Gerät. Andere als die, überprüfen
Etwas im Auge zu behalten, in Bezug auf laufen etwas in den hintergrund, das Android-OS behält sich das Recht zu töten hintergrund-Prozess zu jeder Zeit, wenn Sie es für notwendig erachtet. Wenn es eine mission critical-timer, die aufgerufen werden, möchten Sie vielleicht überdenken Sie Ihre Herangehensweise.
Sie kann nicht laufen, alles auf einer ausgeschalteten Gerät. Andere als die, überprüfen
AlarmManager
- und/oder JobScheduler
Etwas im Auge zu behalten, in Bezug auf laufen etwas in den hintergrund, das Android-OS behält sich das Recht zu töten hintergrund-Prozess zu jeder Zeit, wenn Sie es für notwendig erachtet. Wenn es eine mission critical-timer, die aufgerufen werden, möchten Sie vielleicht überdenken Sie Ihre Herangehensweise.
InformationsquelleAutor VTR2015 | 2016-02-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, zunächst einmal, ich weiß wirklich nicht, wenn ich Ihre Frage Recht.
Aber ich denke, Sie wollen ein timer, der ausgeführt wird, alle 30 Sekunden ,wenn ich mich nicht Irre.
Wenn dem so ist, Folgendes machen:
Beispiel:
in Ihrem
onClick()
registrieren Sie Ihre timer:Und Ihre processTimerReceiver Klasse:
Vergessen Sie nicht, registrieren Sie Ihr Empfänger in Ihrem Manifest.XML
Wenn Sie jemals wollen, um Abbrechen alarm:
verwenden Sie diese, um so zu tun:
Hoffe, das hilft Ihnen heraus.
PS: ist dies nicht genau das, was u wollen, bitte lassen Sie es in den Kommentaren, oder wenn jemand will, diese zu Bearbeiten, so tun Sie dies bitte.
InformationsquelleAutor Strider
Oh Gott, nicht immer verwenden AlarmManager für 30s Timer. Es ist eine Art overkill und stellen auch eine erhebliche Belastung für die Geräte-Ressourcen (Batterie, CPU...).
Vielleicht könnten Sie versuchen, mit einem realen hintergrund-Dienst anstelle der IntentService als IntentService neigt sich geschlossen, wenn es ausgeführt wird out-of-Arbeit. Nicht sicher, ob dies hier der Fall ist, aber einen Versuch ist es Wert.
AlarmManager
ist die beste option, trotz der Batterie-Entwässerung. für eine bessere Antwort zu Lesen dieser.Ja, aber wenn Sie benötigen, wiederholt 30s timer im hintergrund, auch wenn die app nicht läuft, dann ist das eine schlechte app-design. Die Auslösung einer alarm alle 30 s ist wirklich ein schlechtes design.
Stimmt, aber ich weiß nicht, wenn ich seine Frage quitte Recht 😛 . Also vielleicht ist das aber auch nicht genau, was er will. Was hast u machen, seine Frage? Ich wollte nur schieben Sie ihn in die richtige Richtung
Ich weiß, er will eine 30s timer-auslösen, auch wenn die app im hintergrund (nicht sicher, was er bedeutet, durch ausschalten). Hintergrund-Dienst wird den trick tun hier, bis das OS entscheidet, zu töten es durch einen Mangel an Ressourcen (wenig Speicher). Andere dann, dass es wäre eine bessere Lösung, es sei denn, der Autor will etwas ganz anderes hier.
Sie sagte, es ist ein schlechtes design, aber sagen wir mal wenn ich ihm meine Lage, fast in "Echtzeit" zu erhalten einigen Ergebnisse auf der Grundlage, dass der Standort würde nicht statisch sein, was ist die beste Lösung ?
InformationsquelleAutor Zoran P