2016-12-24 2 views
-1

Привет, я хочу запускать функцию каждую секунду в фоновом режиме. Итак, после нажатия кнопки в приложении счетчик пойдет, и каждую секунду он получит + 1, и если я переключусь на другое приложение и вернусь, он должен был все еще считать в фоновом режиме.Android Java выполняет функцию каждую секунду в фоновом режиме

Как это сделать

Alarmmanager? Обработчик?

что это лучший способ для этого.

ответ

0

несколько месяцев назад .. я исследовал на это, и я нашел это

-Alarm менеджер сохранить больше батареи, чем при использовании обработчика + wakelock. Но это вопрос периода синхронизации ..

Реализация:

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); 
    }  
} 

сделать имя метода: startServiceAlaramManager() и вызывать его из вашей основной деятельности или, возможно, вашего заставки

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

Вы можете использовать TimerTask вместе со службой. См this

Здесь приведен пример использования функции scheduleAtFixedAtFixedRate (...):

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

Чтобы бросить еще один вариант в соединение, попробуйте ScheduledExecutorService. Создайте runnable и используйте scheduleAtFixedRate(). Я уезжаю от своего компьютера Dev на Рождество, поэтому не могу проверить, будет ли это работать, пока приложение будет задумано. В приведенной выше ссылке есть пример кода.

Смежные вопросы