我需要创建一个计时器(具有启动和停止功能),它还可以在后台继续工作,因为: - 我的应用程序有两个活动可以通过意图切换,所以如果我返回活动1,计时器必须继续工作,如果我返回活动2(计时器),“textview”必须更新继续工作的计时器 - 如果我把应用程序放在后台,计时器必须继续工作。 我怎样才能做到这一点? 我发现了这个,但我不确定它能做我需要的:http://examples.javacodegeeks.com/android/core/os/handler/android-timer-example/
谢谢!
答案 0 :(得分:1)
要使计时器在后台运行,请使用 Asynctask 。然后,如果需要,您可以使用 RunOnUiThread 方法(或者如果您愿意的话单独的线程)从Asynctask的doinBackground函数切换前景中的活动。
答案 1 :(得分:0)
通过java.util.Timer
和java.util.TimerTask
使用计时器的标准Java方法在Android中运行良好,但您应该知道此方法会创建一个新线程。
您可以考虑使用非常方便的Handler类(android.os.Handler)
,并通过sendMessageAtTime(android.os.Message, long)
或sendMessageDelayed(android.os.Message, long
向处理程序发送消息。收到消息后,您可以运行所需的任务。第二个选项是创建一个Runnable对象,并通过Handler函数postAtTime(java.lang.Runnable, long)
或postDelayed(java.lang.Runnable, long).
重复任务:
new Timer()。scheduleAtFixedRate(task,after,interval); 对于单次任务:
new Timer()。schedule(task,after);
任务是要执行的方法 在初始执行之后 (间隔重复执行的时间)
<强>处理程序:强>
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);