2011-01-04 3 views
4

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

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

ответ

0

Я написал это тестовое приложение, чтобы попробовать асинтез. он запускает 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> 
1

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

+0

Последняя отладочная печать завершена в onPostExecute. процесс завершен. для этого я попытался запустить процесс примерно 20 раз, и все 20 все еще находятся в окне отладки. –

+0

Невозможно сказать, не знаю точно, что вы делаете и что видите. Но это звучит неразумно. – Falmarri

+0

Кажется, действительно странно оставлять все выполняемые задачи. Когда приложение будет загружено конечному пользователю, я не буду знать, что происходит. –

1

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

точные Слова JavaDoc в: «Задача может быть выполнена только один раз (. Исключение будет сгенерировано, если второе исполнение попытка)»

+0

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

+0

На самом деле - почему мы не можем использовать его снова? У меня есть задача, которая вызывает HTTP-сервер, и каждый раз, когда мне нужны некоторые данные, я хочу их использовать. как это можно добиться иначе? – Dani

0

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

Смежные вопросы