我正在创建一个应用程序,当歌曲开始播放时将更新发送到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);
}
答案 0 :(得分:3)
您将AsyncTask
声明为静态变量。这意味着您的引用会混淆,即当您开始新的AsyncTask
时,您将用新的引用覆盖之前的引用。