2016-09-20 3 views
-4

Wir haben eine App, die eine Aufgabe alle 10 Sekunden verarbeiten sollte. Dies sollte mehr oder weniger genau sein, was bedeutet, dass ein Unterschied von 1 oder 2 Sekunden OK ist, aber keine Lücken von 20 Sekunden oder mehr.Android: Aufgabe alle 10 Sekunden (genau)

Dies sollte unabhängig davon funktionieren, ob die App im Vordergrund oder im Hintergrund geöffnet ist.

Wir implementieren dies über AlarmManager, aber es funktioniert nicht richtig. Wenn das Smartphone nicht angeschlossen ist und im Hintergrund läuft, gibt es Lücken in der Ausführung.

Mit Android 4.3., haben wir Lücken (etwa 30 Sekunden) von Zeit zu Zeit, mit Android 5.x wir weniger Lücken, aber Lücken über 5 oder 10 Minuten lang!

Ich denke es muss einen Weg geben, dies zu implementieren, ein Wecker ist auch möglich und ist genau.

Mehr über die App: Es funktioniert in einem Dienst und ein Rundfunkempfänger ist implementiert. Dies bedeutet, dass der Dienst neu gestartet wird, wenn ich die App lösche oder das Handy neu starte. Dies funktioniert korrekt. Das einzige Problem ist die zweite Aufgabe 10.

Irgendwelche Hinweise? Wie wird ein Wecker implementiert? Welche Anrufe, API?

Ich habe verschiedene Möglichkeiten bisher ohne Erfolg versucht.

Dank Hans

Antwort

0
public void callAsynchronousTask() { 
    final Handler handler = new Handler(); 
    Timer timer = new Timer(); 
    TimerTask doAsynchronousTask = new TimerTask() {  
     @Override 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() {  
        try { 
         PerformBackgroundTask performBackgroundTask = new PerformBackgroundTask(); 
         // PerformBackgroundTask this class is the class that extends AsynchTask 
         performBackgroundTask.execute(); 
        } catch (Exception e) { 
         // TODO Auto-generated catch block 
        } 
       } 
      }); 
     } 
    }; 
    timer.schedule(doAsynchronousTask, 0, 10000); //execute in every 10000 ms 
} 
-2

Verwendung von "Alarmmanager" mit "Receiver übertragen" und "Service". Diese 3 Komponenten werden Ihre Anforderung erfüllen.

Verwenden Sie den Alarm Manager zum Generieren eines Broadcast Receivers, und starten Sie von BroadcastReceiver einen Dienst, in den Sie Ihren gewünschten Logikcode eingeben können, um Ihre Aufgabe alle 10 Sekunden auszuführen.

+2

, dass eine eher vage und unvollständige Antwort ist. –

+0

Hallo. Ich versuche es mit dem AlarmManager. Das funktioniert, mein Tast wird alle 10 Sekunden aufgerufen. Aber nach einer Weile ist es nicht für 5 oder 10 Minuten aufgerufen! Dies tritt auf, nachdem die App für mehrere Minuten oder Stunden ausgeführt wurde und jede Stunde (mehr oder weniger) auftritt. Ich habe keine Idee warum. – Hans

+0

Gut zu hören, dass es für dich funktioniert hat. Ich verstehe dein aktuelles Problem. Dies geschieht normalerweise, weil der Kundendienst aufgrund von Ressourcenmangel oder aus einem anderen Grund gestoppt werden kann. Um es für jedes Mal laufen zu lassen, müssen Sie sich auch für andere Broadcast-Empfänger registrieren. Zum Beispiel müssen Sie sich nach dem Ausführen von wake_up-Berechtigungen für Wake_up registrieren. Sobald der Benutzer das Telefon benutzt, wird der Broadcast-Empfänger angerufen, und Sie können überprüfen, ob der gewünschte Dienst läuft oder nicht. Wenn nicht, starte den Service. Sie können sogar sharedprefs verwenden, um Werte des letzten Dienstes namens toast zu speichern. –

0

Sie können es mit Handler und runnable tun, was meiner Meinung nach von Android bevorzugt wird ..

public class ActivityMain extends Activity 
{ 
    private Handler mainHandler = new Handler(); 
    private Runnable backgroundTask = new Runnable() { 
     @Override 
     public void run() { 
      //do your background task 
      mainHandler.postDelayed(this, 10000); 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mainHandler.postDelayed(backgroundTask, 10000); 
    } 
} 
+0

Ich habe das versucht, kein Erfolg. Es gibt Caps von mehreren Sekunden oder Minuten. Ich weiß nicht warum. Die App sollte im Vordergrund und im Hintergrund arbeiten. – Hans

Verwandte Themen