【问题标题】:AsyncTask is not functioning properly when called repetedly from thread从线程重复调用时,AsyncTask 无法正常运行
【发布时间】:2013-11-27 05:53:17
【问题描述】:

我正在制作一个应用程序,它会在歌曲开始播放时向网络服务器发送更新...我通过 asynctask 进行网络服务器更新,但有时会跳过一些信息并且重复发送一些信息。在某些情况下,asyntask 保持在运行状态,使其不再执行。主线程运行良好。

我在 MainActivity 中声明了这样的实例

    private static AsyncTask<Void, Void, Void> mTask = null;

Asynctask 的代码是

private class SendingData extends AsyncTask<Void,Void,Void>{

        @Override
         protected void onPreExecute(){
            //some task              
         }         
        protected void onPostExecute(Void params){
            Log.d("Tesing","After Post");
            super.onPostExecute(params);         
            }
        @Override
        protected Void doInBackground(Void... arg0) {
            sendPost();
            return null;
        }

     }  

当主线程中的一首新歌更改时,我对 asynctask 的调用。这是重复调用

 if(mTask.getStatus() == AsyncTask.Status.FINISHED){
                   // My AsyncTask is done and onPostExecute was called
                   Log.d("AsyncTask Status","Finished");
                  mTask = new SendingData();
                  mTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);

              }else if(mTask.getStatus() == AsyncTask.Status.PENDING){
                  Log.d("AsyncTask Status","Pending");
                  try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                  mTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
              }

【问题讨论】:

    标签: android multithreading android-asynctask


    【解决方案1】:

    您将AsyncTask 声明为静态变量。这意味着您的引用会混淆,即当您开始新的AsyncTask 时,您将用新的引用覆盖之前的引用。

    【讨论】:

    • 每次遇到或必须调用asynctask时我是否应该重新引用?我将如何检查以前调用的 asynctask 的状态,或者我只是调用一个新任务而不考虑前一个,如下所示 new SendingData().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
    • 对于重复性任务,AsyncTask.SERIAL_EXECUTOR 或 AsyncTask.THREAD_POOL_EXECUTOR 哪个更好?请解释一下。
    猜你喜欢
    • 2013-03-18
    • 2013-09-25
    • 2016-10-07
    • 1970-01-01
    • 2012-12-15
    • 2011-08-13
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多