我有一个带按钮的活动。当我按下该按钮时,应该每10分钟调用一次方法。
我正在尝试使用Handler
和Timer
。但是无法得到结果。
答案 0 :(得分:15)
创建一个Timer
对象并给它一个TimerTask
来执行您想要执行的代码。
Timer timer = new Timer ();
TimerTask hourlyTask = new TimerTask () {
@Override
public void run () {
// your code here...
}
};
// schedule the task to run starting now and then every hour...
timer.schedule (hourlyTask, 0l, 1000*60*60); // 1000*10*60 every 10 minut
使用Timer对象的优点是它可以处理多个TimerTask对象,每个对象都有自己的定时,延迟等。只要你通过声明Timer对象来保持定时器,你也可以启动和停止定时器。作为类变量或其他东西。
答案 1 :(得分:2)
如果您不需要在后台运行您的应用,请使用AlamManager。否则,您可以拥有一个持续运行的服务和CountDownTimer
答案 2 :(得分:2)
使用以下代码,并在没有给出第二个参数的毫秒数后重复调用notifyme()
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
public void run()
{
View v = new View(getApplicationContext());
notifyMe(v);
}},4000,100000);
}
答案 3 :(得分:1)
Alarm Manager适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行。
对于正常的计时操作(刻度,超时等),使用Handler会更容易,也更有效。
答案 4 :(得分:1)
- 最好使用Service
,Activity
View
。
- Service
可以有界或无界到Activity
。
请参阅此链接了解服务示例:
http://www.vogella.com/articles/AndroidServices/article.html
- 但如果您仍想使用主题,请尝试此操作...
1。如果您的Thread
(非用户界面) 未在专用UI线程上发布任何数据,则无需使用Handler,但如果确实如此,则必须使用Handler。
<强>例如强>
Handler h;
onCreate() {
h = new Handler();
new Thread(new Runnable() {
public void run(){
while(true){
try{
h.post(new Runnable(){
public void run(){
go();
}
}
TimeUnit.MINUTES.sleep(10);
}
catch(Exception ex){
}
}
}
}).start();
}
public void go(){
// This method is called every 10 minutes
}
您使用称为Painless Threading
的内容(称为AsyncTask
。