Java 在android中定期运行异步任务
我想每1秒运行一个异步任务,每1秒更新一次屏幕。Java 在android中定期运行异步任务,java,android,multithreading,Java,Android,Multithreading,我想每1秒运行一个异步任务,每1秒更新一次屏幕。 怎样才能做到呢 举个简单的例子,我想每1秒显示一次当前时间。 我创建了一个异步任务,它可以计算当前时间并更新UI一次。 任务如何无限地运行 您可以使用定时器和定时器任务 文档建议使用ScheduledThreadPoolExecutor,但计时器非常简单,仍然值得考虑。异步任务的设计不允许重复运行。这是一次性的。你开枪,处理这些东西,然后忘记它。对于重复工作,请尝试: 调度线程池执行器 定时器任务 报警管理器 这两种方法都可以为您完成任务
怎样才能做到呢 举个简单的例子,我想每1秒显示一次当前时间。
我创建了一个异步任务,它可以计算当前时间并更新UI一次。
任务如何无限地运行 您可以使用
定时器
和定时器任务
文档建议使用
ScheduledThreadPoolExecutor
,但计时器非常简单,仍然值得考虑。异步任务的设计不允许重复运行。这是一次性的。你开枪,处理这些东西,然后忘记它。对于重复工作,请尝试:
- 调度线程池执行器
- 定时器任务
- 报警管理器
这两种方法都可以为您完成任务。按如下方式编写代码:
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);
}
}
所有这些答案都是错误的。如果你想在另一个线程上发生一些事情,定期使用一个奇怪的线程。在顶部放置一个while循环,并使其休眠到下次运行。使用ScheduledThreadPoolExecutor
:我认为每秒启动一个新线程是无效的。@kusef-线程池的要点是,您不会每次都启动一个新线程,不过,还是希望能重复使用一个小数字。这是对OP的评论:)感谢重播解决了这个问题。作者希望每1秒更新一次GUI,这样GUI线程中就必须发生“某些事情”。作者以这个为例。他最初说AsyncTask,这意味着他想在另一个线程中做一些事情。如果这不是他想要的,他应该澄清。例如,如果他想访问一个网站并发布结果,他必须使用线程或AsyncTask(这里AsyncTask是错误的解决方案),然后通过处理程序将UI更改发布回UI线程。同意如果他在另一个线程上不需要它,那么线程不是正确的解决方案。