android - 如何实现执行 AsyncTask 的 Timer/TimerTask? (安卓)

标签 android multithreading timer android-asynctask timertask

我正在尝试在指定时间(即每隔几秒,尽管此速率可能会在运行时发生变化)以异步方式重复执行任务(即从文本文件加载数据)。

我做了一些研究并决定这将需要一个 AsyncTask 或一个单独的线程。为了简单起见,我决定使用 AsyncTask。

我现在需要根据重复的计时器计划执行此 AsyncTask。我相信我必须使用 Timer 和 TimerTask。

下面的代码是我想要实现的一种简单形式。当我尝试使用 Android 模拟器(通过 Eclipse IDE)运行此代码时,我收到以下消息:“抱歉!应用程序意外停止。请重试。”

我想知道问题出在哪里以及如何解决。谢谢!

public class Sample extends Activity {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    SimpleTimerTask myTimerTask = new SimpleTimerTask(); 

    long delay = 0;
    long period = 5000;

    Timer myTimer = new Timer();
    myTimer.schedule(myTimerTask, delay, period);
}


private class SimpleAsyncTask extends AsyncTask<Void, Void, Void> {
    protected Void doInBackground(Void... params) {
        return null;
    }   
}


private class SimpleTimerTask extends TimerTask {
    public void run() {
        new SimpleAsyncTask().execute();
    }       
}

}

编辑:这是似乎相关的 LogCat 消息

致命异常:Timer-0

java.lang.ExceptionInInitializerError

在...

Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

在...

最佳答案

你让这条路变得比它需要的更难。 TimerTask 已经在它自己的线程上运行,因此您无需使用 AsyncTask 只需将要运行的代码放入 TimerTask.run( ) 方法。

关于android - 如何实现执行 AsyncTask 的 Timer/TimerTask? (安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6126426/

相关文章:

Android:消息中的ArrayList

c++ - QTimer对象是否在单独的线程中运行?其作用机理是什么?

java - 有没有在 JFrame 中生成计时器的方法?

android - 在 flutter 中将屏幕分成两个相等的部分

android - Droid 的媒体服务器死于 camera.takePicture()

python - Python 中带有包装 C 函数的多线程

java - 中断或停止 hibernate 线程

c# - 在 C# Timer 中完成一小时后准确触发滴答事件

android - 如何将多张图片分享到 whatsapp 应用程序?

android - 更改 Sweet alert 中的按钮样式