5

を作成しましたが、AsyncTaskで を作成する必要があります。while(true)AsyncTask

Activity クラスでボタンのクリックを処理するときに、ブロックせずにこのような無限ループを実行するにはどうすればよいですか?

4

3 に答える 3

1

他の人が言ったように、「無限ループ」を AsyncTask の doInBackground() メソッド内に配置する必要があります。ただし、アクティビティまたはアプリケーションが存在するときに終了する必要があるため、このループはそれほど無限ではありません。に変更while (true) { }while (! mustStop) { }、ブール値の mustStop をアクティビティのインスタンス変数として設定することをお勧めします。そのため、設定することでプロセスをきれいに停止できますmustStop=true(これを onPause メソッドで設定することをお勧めします)。

したがって、これは次のようになります。

public class AsyncBigCalculActivity extends Activity {

private boolean mustStop = false;

@Override
public void onPause() {
    super.onPause();
    mustStop=true; // Stop the infinite loop
}

....

@Override
 protected String doInBackground(String... params) {
    mustStop=false;
    while (!mustStop) {
         ...
    }
 }
于 2013-01-22T15:25:15.000 に答える
0

doInBackground()AsyncTaskのメソッド内にループを配置できます。提案として、AsyncTask をアクティビティ内の内部クラスとして追加できます。これにより、アクティビティで宣言された変数に簡単にアクセスできます。Androidのドキュメントでは、短いタスクにのみ AsyncTask を使用することを提案していますが。実行可能なオブジェクトを作成し、メソッドwhile loop内に配置して、 を使用して実行することをお勧めします。これにより、android でスレッドセーフな方法で非同期コードを実行できます。run()ExecutorService

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html

http://developer.android.com/reference/java/util/concurrent/ExecutorService.html

于 2013-01-22T15:15:36.750 に答える