Java Android AsyncTask - AsyncTask什么时候停止运行?

时间:2011-01-04 23:48:00

标签: android android-asynctask

我有一个AsyncTask运行并完成其工作并完成。 onPostExecute做它应该做的事情,一切都很好。但该任务仍在Eclipse中的调试窗口上运行。每次我运行任务时,我都会得到一个新任务。所以它不会重复使用我猜的任务。

有没有人见过这个?

4 个答案:

答案 0 :(得分:1)

它不会重复使用该任务。它一直运行直到onPostExecute完成。它可能仍在您的调试窗口中,因为该对象尚未被垃圾收集。别担心。

答案 1 :(得分:1)

为什么必须“重复使用任务”? AsyncTask的Javadoc非常清楚:一旦doInBackground()运行完成,我们就不应该重用AsyncTask。尝试重用会导致异常。

Javadoc的确切用语:“任务只能执行一次(如果尝试第二次执行则会抛出异常。)”

答案 2 :(得分:0)

我写了这个测试应用程序来尝试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>

答案 3 :(得分:0)

调试器中列出的任何对象都不会被垃圾回收。这是因为调试器持有对它们的引用并且是正确的行为