を作成しましたが、AsyncTask
で を作成する必要があります。while(true)
AsyncTask
Activity クラスでボタンのクリックを処理するときに、ブロックせずにこのような無限ループを実行するにはどうすればよいですか?
を作成しましたが、AsyncTask
で を作成する必要があります。while(true)
AsyncTask
Activity クラスでボタンのクリックを処理するときに、ブロックせずにこのような無限ループを実行するにはどうすればよいですか?
他の人が言ったように、「無限ループ」を 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) {
...
}
}
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