如何及时定期执行任务?

时间:2014-02-19 08:44:06

标签: android multithreading scheduled-tasks

您好我想知道如何让任务执行一段时间并停止它。我尝试过Thread.Sleep()但它没有用。所以基本上我的想法是我想每5秒执行一次任务然后停止重复它。

启动任务 - 创建活动时。

执行任务

等待5秒

再次执行任务

...

活动已结束

任务不再执行。

8 个答案:

答案 0 :(得分:1)

你可以试试这个:

Timer timer = new Timer();
TimerTask tt = new TimerTask() {
    @Override
    public void run() {
        yourTaskMethod();
    }
};
timer.scheduleAtFixedRate(tt, 0L, 5000L);

更新:
如果你打算在Toast之类的方法中使用主要元素,或者你应该使用其他东西:

public void yourTaskMethod() {
    //simple elements that don't need main thread
    int a = b+c;
    // for elements that use main thread
    runOnUiThread(new Runnable() {
        public void run() {
            Toast...
        }
    });
}

答案 1 :(得分:1)

使用TimerTask如下

Timer t = new Timer();
    TimerTask task = new TimerTask() {
        @Override
        public void run() {

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // Do your stuff

        }
    });


        }
    };
    t.scheduleAtFixedRate(task, 1000, 5000);  

at onDestry

t.cancel()

答案 2 :(得分:0)

如果您只想在活动开放时执行任务,最简单的方法是使用计时器。有关计时器的说明,请参阅here

答案 3 :(得分:0)

你可以Schedule Repeating Alarms

Intent intent = new Intent(this, TestService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),5000, pintent);   // 5000 means 5 second

TestService.java

public class TestService extends Service 
{
     @Override
     public void onCreate() 
     {
              // TODO Auto-generated method stub

              Toast.makeText(getApplicationContext(), "Service Created", 1).show();
             super.onCreate();
     }
}

答案 4 :(得分:0)

final Thread myTask = new Thread(   new Runnable(){     public void run(){       int count = 0;       while(count< = 1){         //做你需要的一切         ...         计数++;         System.sleep(5000); // 5秒       }     }   } )。开始();

答案 5 :(得分:0)

查看有关Alarm Manager的文档 - 这对我帮助很大。

答案 6 :(得分:0)

使用Alarm Manager这是android的标准方式

答案 7 :(得分:0)

使用runnable线程并使用处理程序启动它...由handler.postDelayed(runnable,5 * 1000).... 在runnable ....的run方法中调用相同的语句。