1

私はアンドロイド開発が初めてです。画像をロードしてimageViewで更新するスレッドを作成するアクティビティがあります。スレッドは「無限ループ」を実行します。アクティビティが停止したときにスレッドも停止したい。以下に、私が実装したサンプルを示しますが、例外がスローされ、スレッドが引き続き機能するか、アプリがクラッシュします。助言がありますか?

public class myActivity extends Activity{

   Thread tr;


   .... onCreate(){
        bla bla bla

        tr = new Thread();
        tr.start();
   }

   .....onDestroy(){
        tr.interupt();
   }

   bla bla bla
}

完全なコードを書いていないことを申し訳ありませんが、私はコードを持っている家にいません。正常に停止するには何を変更すればよいですか?

また、パブリック静的ブール値を設定し、onDestroy を false に設定する別のトリックも試しました。

スレッドでは、「無限ループ」は次のように機能します。

public static Boolean is = true;

スレッド内:

while (is == true)....

onDestroy:

is = false; 

では、このトリックでは、ループが終了するため、スレッドは操作が終了したときに強制終了されますか?

4

2 に答える 2

3

runメソッドの実行が終了すると、スレッドは終了します。booleanそのため、 を に設定して while ループを中断しfalse、制御が の最後に到達するとrun、スレッドは確実に終了します。実際、これは Java でスレッドを停止するための推奨される方法です。

覚えておくべき重要なポイントの 1 つは、あるスレッドによって変更され、別のスレッドによって読み取られる変数を常に として設定しvolatile、変数のキャッシュなどの最適化によってコードが壊れないようにすることです。

public static volatile boolean is = true;
于 2012-01-13T12:41:49.750 に答える
0

最初のアプローチを使用して問題を解決しないでください。このアプローチは、Java スレッドのドキュメントでは推奨されていません。あなたの2番目のアプローチは、この仕事をするための最良の方法です. 2番目のアプローチでは、onDestroyメソッドで「is」変数をfalseにすると、スレッド内のwhileループがすぐに壊れます。このwhileループの後、コードを記述した場合は実行を継続し、スレッドコードの最後に到達すると、スレッドは自動的に停止します。

于 2012-01-13T12:11:55.200 に答える