Android创建e计时器也在后台

时间:2014-01-20 08:55:34

标签: android android-intent android-activity timer background

我需要创建一个计时器(具有启动和停止功能),它还可以在后台继续工作,因为:   - 我的应用程序有两个活动可以通过意图切换,所以如果我返回活动1,计时器必须继续工作,如果我返回活动2(计时器),“textview”必须更新继续工作的计时器   - 如果我把应用程序放在后台,计时器必须继续工作。 我怎样才能做到这一点? 我发现了这个,但我不确定它能做我需要的:http://examples.javacodegeeks.com/android/core/os/handler/android-timer-example/

谢谢!

2 个答案:

答案 0 :(得分:1)

要使计时器在后台运行,请使用 Asynctask 。然后,如果需要,您可以使用 RunOnUiThread 方法(或者如果您愿意的话单独的线程)从Asynctask的doinBackground函数切换前景中的活动。

答案 1 :(得分:0)

通过java.util.Timerjava.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);