OnPostExecute () не работает над повторным запуском asyncTask, вызванным из действия

В первый раз, если я запускаю свое приложение, тогда элемент управления переходит к onPostExecute () после завершения doinBackground (). Но если я запустил приложение на устройстве без удаления, то onPostExecute () никогда не будет выполняться.

У меня есть активность, из которой я звоню в asynTask.

КОД:

public class AddThing extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); try { Class.forName("android.os.AsyncTask"); } catch (ClassNotFoundException e) { e.printStackTrace(); } private View.OnClickListener onSave = new View.OnClickListener() { startAddThingType2Task(); } } private class ThingCallback implements ActionCallback { Context cntxt; public ThingCallback(Context context) { // TODO Auto-generated constructor stub this.cntxt = context; } public void onSuccess(ArrayList<?> objects) { setProgressBarIndeterminate(false); Intent intent = new Intent(getApplicationContext(),DocketDetail.class); startActivityForResult(intent, 1); } public void onFailure(Exception exception) { Toast.makeText(cntxt, "Unable to add docket. Error is: "+ exception.getMessage(), Toast.LENGTH_LONG).show(); } } private void startAddThingType2Task() { final AddThingType2 task = new AddThingType2(AddThing.this,new ThingCallback(this)); runOnUiThread(new Runnable() { public void run() { // TODO Auto-generated method stub task.execute(); } }); } 

Мой класс asyncTask:

 public class AddThingType2Task2 extends AsyncTask<Void, Void, Boolean> { public ActionCallback callback = null; private Context context; private Exception ePriv = null; private Activity activity; public AddThingType2(Activity activity,ActionCallback callback, ) { this.callback = callback; this.context = context; this.activity = activity; } @Override protected void onPostExecute(Boolean result) { // TODO Auto-generated method stub super.onPostExecute(result); if (result == true) { callback.onSuccess(null); } else { callback.onFailure(ePriv); } } @Override protected Boolean doInBackground(Void... params) { // TODO Auto-generated method stub Boolean retval = false; try { retval = true; } } catch (Exception e) { Log.e("AddThingType2Task", e.getMessage()); ePriv = e; } return retval; } } 

Интерфейс onSuccess() имеет два метода – onSuccess() и OnFailure() .

Редактировать Я использую commonsware службы бодрствования в моем приложении.

Впервые его работая как шарм, но при повторном запуске onpostExecute () не работает …

Пожалуйста помоги !!

С уважением

После повторного запуска я получаю это в logcat :

 09-20 17:37:28.515: W/MessageQueue(9311): Handler{4060df08} sending message to a Handler on a dead thread 09-20 17:37:28.515: W/MessageQueue(9311): java.lang.RuntimeException: Handler{4060df08} sending message to a Handler on a dead thread 09-20 17:37:28.515: W/MessageQueue(9311): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:196) 09-20 17:37:28.515: W/MessageQueue(9311): at android.os.Handler.sendMessageAtTime(Handler.java:457) 09-20 17:37:28.515: W/MessageQueue(9311): at android.os.Handler.sendMessageDelayed(Handler.java:430) 09-20 17:37:28.515: W/MessageQueue(9311): at android.os.Handler.sendMessage(Handler.java:367) 09-20 17:37:28.515: W/MessageQueue(9311): at android.location.LocationManager$ListenerTransport.onStatusChanged(LocationManager.java:206) 09-20 17:37:28.515: W/MessageQueue(9311): at android.location.ILocationListener$Stub.onTransact(ILocationListener.java:75) 09-20 17:37:28.515: W/MessageQueue(9311): at android.os.Binder.execTransact(Binder.java:320) 09-20 17:37:28.515: W/MessageQueue(9311): at dalvik.system.NativeStart.run(Native Method) 

 public class AddThing extends Activity { private ThingCallback callback; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ThingCallback = new ThingCallback(this); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); try { Class.forName("android.os.AsyncTask"); } catch (ClassNotFoundException e) { e.printStackTrace(); } private View.OnClickListener onSave = new View.OnClickListener() { startAddThingType2Task(); } } private class ThingCallback implements ActionCallback { Context cntxt; public ThingCallback(Context context) { this.cntxt = context; } public void onSuccess(ArrayList<?> objects) { setProgressBarIndeterminate(false); Intent intent = new Intent(getApplicationContext(),DocketDetail.class); startActivityForResult(intent, 1); } public void onFailure(Exception exception) { Toast.makeText(cntxt, "Unable to add docket. Error is: "+ exception.getMessage(), Toast.LENGTH_LONG).show(); } } private void startAddThingType2Task() { final AddThingType2 task = new AddThingType2(AddThing.this, callback); task.execute(); } 

Используете ли вы какой-либо другой Thread, а затем AsyncTask? Если нет, то нет необходимости использовать runOnUiThread. Удалите его и не сделайте ссылку ссылки AsyncTask окончательной. AsyncTask никогда не может выполняться дважды, поэтому вы должны создавать его каждый раз, когда используете его снова. Конечное ключевое слово предотвратит создание нового экземпляра и сделает ссылку неизменной.

 private void startAddThingType2Task() { AddThingType2 task = new AddThingType2(AddThing.this,new ThingCallback(this)); task.execute(); } 

Если вам нужен runOnUiThread, попробуйте объявить экземпляр AsyncTask в качестве поля. Таким образом, вы не должны делать это окончательным, чтобы использовать его в runOnUiThread.

Редактировать:

У вас будет что-то вроде этого:

 public class AddThing extends Activity { // Your field AddThingType2 task; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); try { Class.forName("android.os.AsyncTask"); } catch (ClassNotFoundException e) { e.printStackTrace(); } private View.OnClickListener onSave = new View.OnClickListener() { startAddThingType2Task(); } private void startAddThingType2Task() { // no final needed and you can instantiate it multiple times task = new AddThingType2(AddThing.this, callback); task.execute(); } } 

Поместите эту загрузку класса в приложение onCreate

 public class MyApplication extends android.app.Application{ public void onCreate(){ try { Class.forName("android.os.AsyncTask"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 
Intereting Posts
Вызов startIntentSenderForResult из фрагмента (без использования существующей активности) (Android Billing v3) Android ListView автоматически Загружает больше данных при прокрутке вверх Android-эмулятор не работает – Visual Studio 2017 Надежный интерпретатор haskell на android Как получить все растровое изображение, прикрепленное к ImageView? Как отправить уведомление fcm на несколько устройств в одном формате fcm Когда я запускаю проект, возникает такая ошибка Как установить дополнение для виджета CardView в Android L Android не прерывает поток ASyncTask после onPostExecution Contextthemewrapper не может быть передан в действие Android, как сфокусировать ActionBar searchView Слушайте собственное событие удаления приложения на Android Получить изображение профиля из Facebook Graph-API Копирование файла APK в проекте Android Gradle Android – использовать сканер отпечатков пальцев и шифр для шифрования и расшифровки нескольких строк