0

スレッド化された小さなアプリケーションを作成しました。このアプリケーションをシングルコアで実行すると、完全に機能します。

異なるPID番号で2回実行されるマルチコア(デュアルコア)の同じアプリケーション。forループがある場合とない場合で、結果は同じです。

アプリケーションを2回実行しないようにする方法を教えてください。これがコードの一部です

for (int i = 0; i < System.Environment.ProcessorCount; i++)
{
    Thread thCurrent = new Thread(sampleMethod);                        
     thCurrent.Start();
     thSubThreads.Add(thCurrent);
} 
4

1 に答える 1

0

メイン アクティビティの開始時に開始する 2 つのスレッドが必要だと思いますが、プログラムが中断されたときにもスレッドが実行されたままになり、プログラムがバックグラウンドから再開するたびに、さらに 2 つのスレッドが誤って起動されます。

アプリケーションがフリーズ状態から再起動した場合にも、Android はonCreate()メソッドを呼び出します。2 つのバックグラウンド スレッドが既に実行されているかどうかを確認する方法を取得する必要があり、実行されている場合は再度開始しないようにする必要があります。

これらの起動されたプロセスを追跡する方法の 1 つは、作成されたスレッドをメイン アクティビティの静的フィールドに割り当てることです。作成時に、スレッド フィールドが null ではなく、スレッドが有効かどうかを確認できるはずです。

onCreate は、格納された状態を探すことができるパラメーター (バンドル) を取ります。ただし、アプリケーションが本当に中断され、クラスがアンロードされた場合、2 つのスレッドはおそらく停止されません (そのような場合に停止できない場合を除きます)。したがって、「スレッドが起動されました」などのブール値をこのバンドルに格納し、後でそれらに依存することが適切かどうかはわかりません。

これらのスレッドを onStop() で停止し、onStart() で開始することをお勧めします。

于 2012-12-24T09:09:14.927 に答える