Java Android AsyncTask - Когда AsyncTask перестает работать? - PullRequest
4 голосов
/ 05 января 2011

У меня есть AsyncTask, который работает, выполняет свою работу и завершает работу. onPostExecute делает то, что должен, и все хорошо. НО задача все еще выполняется в окне отладки в Eclipse. Каждый раз, когда я запускаю задание, я получаю новое. Так что не повторное использование задачи, я думаю.

Кто-нибудь видел это раньше?

Ответы [ 4 ]

1 голос
/ 15 февраля 2011

Почему вы должны «повторно использовать задачи»?Javadoc для AsyncTask довольно ясен: мы не должны повторно использовать AsyncTask после того, как doInBackground () запустится до конца.Попытка повторного использования приведет к исключению.

Точные слова Javadoc: «Задача может быть выполнена только один раз (исключение будет выдано, если будет предпринята вторая попытка.)» *

1 голос
/ 05 января 2011

Это не повторно использовать задачу. Он продолжает работать, пока не закончится onPostExecute. Это, вероятно, все еще в вашем окне отладки, потому что объект еще не был собран мусором. Не беспокойся об этом.

0 голосов
/ 14 апреля 2012

Любые объекты, перечисленные в отладчике, не будут собираться мусором.Это связано с тем, что отладчик содержит ссылку на них и имеет правильное поведение

0 голосов
/ 05 января 2011

Я написал это тестовое приложение, чтобы попробовать asynctask. он запускает 5 фоновых задач, а затем должен их повторно использовать. Я просто хотел бы знать, что это нормально, так как я не смог найти никаких ссылок на эту проблему. Я хотел бы знать, почему 5 задач? Они освобождают память и что еще они принимают? Я бы поставил это в комментарии, но, похоже, не разрешил фрагменты кода

    package com.mvw.tas;

import java.io.IOException;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class TestAsync extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        Button btnD = (Button)findViewById(R.id.Btn01);

        btnD.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                new gback().execute( "");
            }
        });

    }

    ////////////////////////////////////////
    public class gback extends AsyncTask<String, Void, IOException> {
        //@Override
        protected IOException doInBackground(String... params) {
            Log.d( "ASTEST", "Running background");
            return null;

        }

        @Override
        protected void onPostExecute(IOException result) {
            Log.d( "ASTEST", "Post Exec");


        }

        @Override
        protected void onPreExecute() {

            Log.d( "ASTEST", "PRE Exec");;
        }

    }

}

и XML

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />



<Button android:text="Test AysncTask" android:id="@+id/Btn01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...