Расписание задач в Android - PullRequest
8 голосов
/ 18 мая 2010

Я использую код ниже для планирования задачи в Android, но это не дает никаких результатов.Пожалуйста, посоветуйте то же самое.

int delay = 5000; // delay for 5 sec.
int period = 1000; // repeat every sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {

   public void run() {
      Toast.makeText(getApplicationContext(),"RUN!",Toast.LENGTH_SHORT).show();
   }

}, delay, period);

Ответы [ 2 ]

17 голосов
/ 05 мая 2011

TimerTasks не идеальны для использования в среде Android, потому что они не учитывают контекст.Если ваш контекст исчезнет, ​​TimerTask по-прежнему будет терпеливо ждать в фоновом режиме, в конечном итоге вызывая и вызывая сбой вашего приложения, поскольку его действие было ранее завершено.Или он может хранить ссылки на вашу активность после ее закрытия, предотвращая ее сборку мусора и потенциально заставляя ваше приложение исчерпать память.

Вместо этого используйте postDelayed (), который автоматически отменит задачукогда действие отключено.

final int delay = 5000;
final int period = 1000;
final Runnable r = new Runnable() {
    public void run() {
        Toast.makeText(getApplicationContext(),"RUN!",Toast.LENGTH_SHORT).show();
        postDelayed(this, period);
    }
};

postDelayed(r, delay);

Кстати, если вам когда-нибудь понадобится отменить задачу вручную, вы можете использовать removeCallbacks(r), где r - это исполняемый файл, который вы опубликовали ранее.

4 голосов
/ 18 мая 2010

Я получил ответ согласно приведенному ниже коду:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Timer timer = new Timer();

    timer.schedule(new ScheduledTaskWithHandeler(), 5000);

}

final Handler handler = new Handler() {

   public void handleMessage(Message msg) {
       Toast.makeText(getApplicationContext(), "Run!",
           Toast.LENGTH_SHORT).show();
   }
};

class ScheduledTaskWithHandeler extends TimerTask {

    @Override
    public void run() {
        handler.sendEmptyMessage(0);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...