从线程重复调用时,AsyncTask无法正常工作

时间:2013-11-27 05:53:18

标签: android multithreading android-asynctask

我正在创建一个应用程序,当歌曲开始播放时将更新发送到Web服务器...我通过asynctask进行Web服务器更新,但有时会跳过某些信息并重复发送一些信息。在某些情况下,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);
              }

1 个答案:

答案 0 :(得分:3)

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

相关问题