2011-01-04 27 views
4

AsyncTaskが実行され、そのジョブが完了して完了しました。 onPostExecuteは、それが何をすべきかを行い、すべてが良好です。しかし、タスクはまだEclipseのデバッグウィンドウで実行されています。私がタスクを実行するたびに、私は新しいタスクを取得します。だから、それは私が推測する仕事を再利用しない。Java Android AsyncTask - いつAsyncTaskの実行が停止しますか?

誰もこれまで見たことがありますか?

答えて

0

私はこのテストアプリを書いて、asynctaskを試しました。 5つのバックグラウンドタスクを実行し、それらを再利用する必要があります。私はこの問題への言及を見つけることができなかったので、これがOKであることを知りたいだけです。なぜ私は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

なぜあなたは、「タスクの再利用」しなければならないの切れ端ができているようだdidntは? AsyncTaskのJavadocはかなり明確です。doInBackground()が完了するまでAsyncTaskを再利用することは想定されていません。再利用を試みると例外が発生します。

のJavadocの正確な言葉:「タスクは一度だけ実行することができます(第2の実行が試行された場合、例外がスローされます。)」デバッガに記載されている

+0

あなたはこれを理解していないと思います。仕事は遠ざかりません。それは完了するが、それはまだプロセスにぶら下がっている。私はそれを再利用したくない、私はちょうどリソースを使用して停止したい。 5つのタスクが作成された後、5つのタスクが自動的にタスクを再開した後に、さらにテストを行ったとします。 –

+0

実際にはなぜもう一度使用できないのですか?私はhttpサーバを呼び出すタスクを持っており、私はそれを使用したいいくつかのデータが必要なたびに。どうすればそれを達成することができますか? – Dani

0

任意のオブジェクトがガベージコレクションされませんが。これは、デバッガがデバッガにリファレンスを保持しているため、正しい動作です。

関連する問題