Я делаю приложение, которое отправляет обновление на веб-сервер при воспроизведении песен ... Я делаю обновление веб-сервера через asynctask, но иногда некоторая информация пропускается, а некоторые информация отправляется повторно. В некоторых случаях asyntask остается в рабочем состоянии, что делает его не выполняющимся после этого. Основная нить работает хорошо.AsyncTask не работает должным образом, когда вызывается повторно из потока
Я объявил экземпляр, как это в 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);
}
Должен ли я делать новую ссылку каждый раз, когда сталкиваюсь или должен вызывать asynctask? как бы проверить статус ранее называемой asynctask или просто вызвать новый, не думая о предыдущем, как ниже new SendingData(). executeOnExecutor (AsyncTask.SERIAL_EXECUTOR); – Saty
, который лучше, чем AsyncTask.SERIAL_EXECUTOR или AsyncTask.THREAD_POOL_EXECUTOR для повторяющейся задачи? Пожалуйста, объясните мне. – Saty