Вопрос

По какой- то причине мой onPostExecute() назван не в честь моего AsyncTask финиши.

Объявление моего класса:

public class setWallpaperForeground extends AsyncTask<String, Integer, Boolean>

Мой onPostExecute():

protected void onPostExecute(Boolean result)

Все работает нормально, мой doInBackground() успешно завершается и возвращает логическое значение, но затем оно просто завершается.

Спасибо

Это было полезно?

Решение

Вы создали свою асинктюду на ниве ui? Также добавьте метод @overRide Annotaiton в вашем методе OnPostexecute (), чтобы убедиться, что вы его правильно заявили.

Другие советы

Вы начали задачу с execute() Метод? То onPostExecute не будет запускать, если вы только что ссылаетесь doInBackground.

Найдено / сделало еще одну противную ошибку:

Если ваши параметры onPostExecute(Param param) не соответствует тому, который вы определили с extends AsyncTask<...,...,Param> и вы не использовали @Override Аннотация, он никогда не будет выполнен, и вы не получаете предупреждение от Eclipse.

Примечание для себя: просто всегда используйте @Override Аннотация и затмение помогут вам.

Еще один простой способ избежать всех названных ошибок:

В затмении: Right-click in code > Source > Override/Implement Methods

После того, как одинаковую проблему, и ни один из этих ответов не помог мне, я узнал, что моя нить UI была заблокирована (я использовал CountDownLatch.await()) и поэтому onPostExecute() Метод, который должен быть вызван потоком пользовательского интерфейса, никогда не был вызван.

Допустил еще одну неприятную ошибку, которая может привести к такой же ошибке.Определяя AsyncTask и вызывая его, я не вызывал execute но звал doInBackground

new AsyncTask<String,Void,Void>() {
    ....
}.doInBackground("parameter");

вместо того , чтобы

new AsyncTask<String,Void,Void>() {
    ....
}.execute("parameter");

Я столкнулся с той же проблемой. Ни один из вышеперечисленных решений не работал для меня. Затем я выяснил проблему, может быть, это помогает кому-то еще.

В UI TOTE я называю следующие коды:

public class XActivity ...{
    onCreate(){
        ....

        new SaveDrawingAsync(this).execute();

        while(true)
        {
            if(MandalaActivity.saveOperationInProgress){
                continue;
            }
            super.onBackPressed();
            break;
        }

        ...
    }
}

Моя определение класса Asyncckask:

public class SaveAsync extends AsyncTask<Object, Void, Void> {

    @Override
    public Void doInBackground(Object... params) {
        saveThem(); // long running operation
        return null;
    }

    @Override
    public void onPostExecute(Void param) {
        XActivity.saveOperationInProgress = false;
    }

    @Override
    public void onPreExecute() {
       XActivity.saveOperationInProgress = true;
    }

}

В вышеуказанном коде onPostexecute не вызывается. Это из-за бесконечной петли после асинкт-казни. Асинктика и инфинитная петля ждет друг друга, чтобы закончить. Таким образом, код застрял!

Решение меняет дизайн!

У меня было такое же поведение, и причина заключалась в том, что я размещаю много сообщений как прогресс внутри Doinbackground со следующим кодом:

new Handler(Looper.getMainLooper()).post(new Runnable() {
   @Override
   public void run() {
     // .. some UI updates
   }
});

Это должно быть перегружено главной очередной очереди сообщений, и вызвала длительную задержку до того, как onPostexuteCute будет вызываться. Решение было опубликовано только один раз в секунду.

Для меня это была пользовательская ошибка. Я заканчиваю асинктюс, призывая отменить (истинно) и не читал документацию достаточно близко, чтобы знать, что onPostexecute не вызывается в этом случае, нак.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top