【问题标题】:Looping Async Tasks in Android - whats the good way?在 Android 中循环异步任务 - 什么是好方法?
【发布时间】:2013-12-15 20:22:43
【问题描述】:

我想每隔几分钟将数据从网络服务器解析到我的安卓设备。 我已经实现了一个 AsyncTask,它正在 OnPostExecute() 方法中更新我的 UI。

我没有找到重复 AsyncTask 的好方法。我尝试了 Handlers、Threads 和 ExecutorServices...我没能在数据更新后让 Asynctask 重复。关于这个主题有数百个线程,每个线程都有不同的结果。

在我的 Handler 尝试重新启动我的可运行对象后,我的源返回了一些 IllegalStateException。

12-15 21:15:36.909: E/AndroidRuntime(28256): java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once)

来源(onCreate() ...):

....
....

    websitesAsyncTask = new WebsitesAsyncTask();
        mHandler = new Handler();

        refreshWebsitesRunnable = new Runnable() {
            @Override
            public void run() {

                // mHandler.removeCallbacks(refreshWebsitesRunnable);

                if (mThreadExecutor == null || mThreadExecutor.isShutdown()) {
                    mThreadExecutor = Executors.newSingleThreadExecutor();
                }

                // TODO Auto-generated method stub
                Log.d("scheduled task",
                        "---Scheduled Task: Refresh Websites");

                if (websitesAsyncTask.getStatus() != Status.RUNNING) {
                //  websitesAsyncTask.cancel(true);

                    websitesAsyncTask
                            .executeOnExecutor(mThreadExecutor);
                }

                mHandler.postDelayed(refreshWebsitesRunnable, 10000);

            }

        };

        startRepeatingTask();
    }

如何在不阻塞 UI 和编写脏代码的情况下重复我的任务?

【问题讨论】:

    标签: java android multithreading android-asynctask


    【解决方案1】:

    一个 AsyncTask 实例只能被调用一次。要进行第二次调用,您需要创建一个新实例。

    【讨论】:

    • 非常感谢,现在可以使用了。将在接下来的几分钟内接受。
    【解决方案2】:

    有一种方法,你实际上需要一个 AsyncTask

    doInBackground(...){
        while(Condition){
            //do your stuff
            //...
    
            Thread.sleep(5000)
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 2014-04-19
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多