起こっているように見えるのは、画面をロックしてから再開するたびに、すでに実行が2倍になっているRunnable
上に別の画面が作成Runnable
されるため、スレッドがどんどん速くなるため、スレッドを一時停止する必要がありますthread.sleep()
。画面をロックするときも同様です。再開するときは、新しいものを再作成するのではなくRunnable
、スレッドで中断したところから開始します。
メソッドで新しいものを作成しているRunnable
場合onCreate
。電話が回転したとき、または電話が再開したときなどに呼び出されるため、この問題が発生している可能性があります。アクティビティやアプリを閉じた後に発生しない理由は、アプリを再起動すると、電話をロックして再開するまでfinish()
、アプリがRunnable
一度作成されるためです。
また、スレッドの処理に役立つ内部クラスを確認することもできます。
public class YourClass extends Activity {
public void yourUpdateMethod() {
runOnUiThread(new Runnable() {
public void run() {
new YourUpdateClass().execute(0, null, null);
}
});
}
private class YourUpdateClass extends AsyncTask<Integer, Void, Void> {
@Override
protected synchronized Void doInBackground(Integer... index) {
return null;
}
@Override
protected synchronized void onPostExecute(Void result) {
//your statements here
}
}
}
これは、一時停止/再開/再開する必要があるスレッド、またはもう少し良いスレッドを処理するのに役立つ場合があります。詳細はこちら:http ://developer.android.com/reference/android/os/AsyncTask.html
それがゲームでどのように機能するかはわかりませんが、それで遊んでいませんでした。
幸運を祈ります。これがお役に立てば幸いです。