AsyncTask doInBackground не запускается [дубликат]

На этот вопрос уже есть ответ:

У меня проблема с классом AsyncTask. Похоже, моя задача перестает работать после создания 4 или 5 задач.

У меня 2 занятия. MainActivity, который содержит только кнопку, запускающую второе действие под названием ImageActivity.

ImageActivity очень прост. он получил onCreate, который устанавливает макет, а затем запускает новую AsyncTask, загружающую изображение из Интернета. Первые несколько раз это работает нормально. Но потом вдруг перестает работать. Каждый раз запускается метод onPreExecute, но не метод doInBackground. Я попытался упростить doInBackground с помощью спящего цикла, и происходит то же самое. Я не могу понять это поведение, поскольку асинтаксическая задача отменена и установлена ​​в значение null в методе onDestroy. Поэтому каждый раз, когда я запускаю новую ImageActivity, я также создаю новую AsyncTask.

Я воссоздаю ImageActivity и задачу, нажимая кнопку «Назад», а затем кнопку на MainActivity.

Есть идеи? Я действительно борюсь с этим.

ОБНОВЛЕНИЕ: Код, запускающий ImageActivity (внутри кнопки onClickListener)

Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.setClassName(this, ImageActivity.class.getName());
startActivity(intent);

Приведенный выше код запускает это действие

    public class ImageActivity extends Activity {

    private AsyncTask task;

    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.main);

        task = new AsyncTask() {

            @Override
            protected void onPreExecute()
            {
                Log.d(TAG, "onPreExecute()");
            }

            @Override
            protected Void doInBackground(Void... params)
            {
                Log.d(TAG, "doInBackground() -- Here is the download");
                // downloadBitmap("http://mydomain.com/image.jpg")
                return null;
            }

            @Override
            protected void onPostExecute(Void res)
            {
                Log.d(TAG, "onPostExecute()");
                if(isCancelled()){
                    return;
                }
            }
        }.execute();
    }

    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        task.cancel(true);
    }
}

ОБНОВЛЕНИЕ:

Я тестировал с использованием комбинации традиционных Threads и метод runOnUiThread, и вроде работает лучше. Теперь поток запускается каждый раз.

34
задан Vidar Vestnes 3 November 2010 в 08:09
поделиться