在android中定期运行异步任务

时间:2014-05-07 19:49:18

标签: java android multithreading

我希望每1秒运行一次异步任务,并每隔1秒更新一次屏幕 怎么办呢?

举个简单的例子,我希望每1秒显示一次当前时间 我创建了一个异步任务,它可以计算当前时间更新UI一次 如何无限地运行任务?

4 个答案:

答案 0 :(得分:2)

Asynch任务不是为重复运行而设计的。它是一个一件事。你开火,处理东西然后忘记它。重复工作尝试:

  • 预定的线程池执行器
  • 的TimerTask
  • 警报管理器

要么为你做好工作。

答案 1 :(得分:2)

这样的代码:

public class MainActivity extends Activity {

TextView mClock;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mClock = (TextView) findViewById(R.id.your_textview_id);
}

private Handler mHandler = new Handler();
private Runnable timerTask = new Runnable() {
    @Override
    public void run() {
        Calendar now = Calendar.getInstance();
        mClock.setText(String.format("%02d:%02d:%02d",
                now.get(Calendar.HOUR),
                now.get(Calendar.MINUTE),
                now.get(Calendar.SECOND)) );
        mHandler.postDelayed(timerTask,1000);
    }
};

@Override
public void onResume() {
    super.onResume();
    mHandler.post(timerTask);
}

@Override
public void onPause() {
    super.onPause();
    mHandler.removeCallbacks(timerTask);
}
}

答案 2 :(得分:0)

您可以使用TimerTimerTask

  1. http://developer.android.com/reference/java/util/Timer.html
  2. http://developer.android.com/reference/java/util/TimerTask.html
  3. 文档建议使用ScheduledThreadPoolExecutor,但Timer非常简单,仍值得考虑。

答案 3 :(得分:-1)

所有这些答案都是错误的。如果你想在另一个线程上发生某些事情,请定期使用一个疯狂的线程。在顶部放置一个while循环,让它睡到下次你希望它运行。