2016-12-24 4 views
-1

Hallo ich möchte eine Funktion jede Sekunde im Hintergrund ausführen. Also nach dem Klicken auf eine Schaltfläche in der App würde ein Zähler gehen und jede Sekunde würde es + 1 bekommen und wenn ich zu einer anderen App wechseln und zurückkommen würde, hätte es immer noch im Hintergrund zählen sollen.Android Java führt jede Sekunde im Hintergrund eine Funktion aus

Wie mache ich das?

Alarmmanager? Handler?

was ist der beste Weg, dies zu tun.

Antwort

0

paar Monate zurück .. hatte ich auf diese recherchiert und ich habe diese

-Alarm-Manager mehr Batterie speichern als die Verwendung von Handler + WakeLock gefunden. Aber es ist eine Frage der Zeitperiode ..

Umsetzung:

UpdateCountInSecond.java

public class UpdateCountInSecond extends Service { 
    int count=0 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO: Return the communication channel to the service. 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
    } 

    @Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 
     //your work 
     count++; 
     return super.onStartCommand(intent, flags, startId); 
    }  
} 

einen Methodennamen machen: startServiceAlaramManager() und nennen es aus Ihre Hauptaktivität oder wahrscheinlich Ihr Begrüßungsbildschirm

public void startServiceAlaramManager(){ 
     // Start service using AlarmManager 

     Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.SECOND, 10); 

     Intent intent = new Intent(this, UpdateCountInSecond .class); 

     PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0); 

     AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     //1 sec =1000 miliseconds 
     alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
       1000, pintent); 
     Toast.makeText(MainActivity.this, "alaram manager set", Toast.LENGTH_SHORT).show(); 

     startService(new Intent(this, UpdateCountInSecond .class)); 
    } 
0

Sie können eine TimerTask zusammen mit einem Dienst verwenden. Siehe this

Hier ist ein Beispiel unter Verwendung von scheduleAtFixedAtFixedRate (...) Funktion:

int counter=0; 
Timer t = new Timer(); 
    t.scheduleAtFixedRate(
     new TimerTask() { 
      @Override 
      public void run() { 
       counter++; 
       //Your code here 
     }, 
     1000, //delay from start in milli seconds 
     1000 //update interval in milli seconds 
); 
0

Um eine weitere Option in die Waagschale zu werfen, versuchen ScheduledExecutorService. Erstellen Sie einen Runnable und verwenden Sie scheduleAtFixedRate(). Ich bin über Weihnachten von meinem Dev-Computer weg und kann nicht überprüfen, ob das noch funktioniert, während die App im Hintergrund läuft. Im obigen Link gibt es ein Codebeispiel.

Verwandte Themen