2

遅延した Runnable を投稿する Handler を使用してゲームを更新しています。

public class Example implements Runnable
{
  Handler handler;
  public Example()
  {
    handler = new Handler();
    handler.postDelayed(this,10);
  }
  public void run()
  {
    handler.postDelayed(this,10);
  }
}

ロック画面のボタンを押してからゲームを再開すると、想定よりもはるかに高速に実行されます。画面をロックして再開するたびに、動作がどんどん速くなります。ただし、アクティビティを再開するか終了してからアクティビティを再度開くと、再び通常の速度で実行されます。助けてください。前もって感謝します。

4

1 に答える 1

3

起こっているように見えるのは、画面をロックしてから再開するたびに、すでに実行が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

それがゲームでどのように機能するかはわかりませんが、それで遊んでいませんでした。

幸運を祈ります。これがお役に立てば幸いです。

于 2011-07-25T20:36:46.147 に答える