2014-01-20 3 views
0

Мне нужно создать таймер (с функцией запуска и остановки), которые продолжают работать и в фоновом режиме, потому что: - мое приложение имеет 2 действия, переключаемые с помощью намерений, поэтому, если i вернуться к действию 1, таймер должен продолжать работать, и если я вернусь к действию 2 (таймера), «textview» должен обновить таймер, который продолжает работать. - если я положил приложение в фоновом режиме, таймер должен продолжают работать. Как я могу это сделать? Я нашел это, но я не уверен, что он может делать то, что мне нужно: http://examples.javacodegeeks.com/android/core/os/handler/android-timer-example/Android создать e таймер, который идет также в фоновом режиме

Спасибо!

+1

Использование 'AlarmManager' –

+0

Это может помочь вам: http://stackoverflow.com/questions/21089815/chronometer-inside-service – Kristopher

ответ

1

Для создания таймера, работающего в фоновом режиме, используйте Asynctask. Затем, если необходимо, вы можете переключать действия на переднем плане из doinBackground функции Asynctask, используя метод RunOnUiThread (или отдельный поток, если вы этого желаете).

0

Стандартный Java-способ использования таймеров через java.util.Timer и java.util.TimerTask отлично работает на Android, но вы должны знать, что этот метод создает новый поток.

Вы можете использовать удобный класс Handler (android.os.Handler) и отправлять сообщения обработчику через sendMessageAtTime(android.os.Message, long) или sendMessageDelayed(android.os.Message, long). После получения сообщения вы можете запускать требуемые задачи. Второй вариант был бы создать Runnable объект и график его с помощью функции обработчика postAtTime(java.lang.Runnable, long) или postDelayed(java.lang.Runnable, long).

Для повторяющейся задачи:.

новый таймер() scheduleAtFixedRate (задача, после того, интервал); Для одного запуска задачи:

новый таймер(). Расписание (задача, после);

задача, метод, который будет выполняться после времени начального выполнения (интервал времени для повторения выполнения)

Handler:

private final int interval = 1000; // 1 Second 
private Handler handler = new Handler(); 
Private Runnable runnable = new Runnable(){ 
    public void run() { 
     Toast.makeText(MyActivity.this, "C'Mom no hands!", Toast.LENGTH_SHORT).show(); 
    } 
}; 
... 
handler.postAtTime(runnable, System.currentTimeMillis()+interval); 
handler.postDelayed(runnable, interval); 

Сообщение:

private final int EVENT1 = 1; 
private Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     switch (msg.what) {   
     case Event1: 
      Toast.makeText(MyActivity.this, "Event 1", Toast.LENGTH_SHORT).show(); 
      break; 

     default: 
      Toast.makeText(MyActivity.this, "Unhandled", Toast.LENGTH_SHORT).show(); 
      break; 
     } 
    } 
}; 

...

Message msg = handler.obtainMessage(EVENT1); 
handler.sendMessageAtTime(msg, System.currentTimeMillis()+interval); 
handler.sendMessageDelayed(msg, interval); 
Смежные вопросы