2011-07-25 7 views
2

遅延ランナーを投稿するハンドラーを使用してゲームを更新しています。Androidの画面をロックするとゲームが高速になります

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

私はロック画面ボタンを押してからゲームを再開するたびに、予想よりもはるかに速く動作します。画面をロックして再開するたびに、速くて速く実行されます。ただし、アクティビティを再開したり、アクティビティを終了してから再度開くと、通常の速度で再び実行されます。助けてください。 ありがとうございます。

答えて

3

あなたの画面をロックしてからもう一度Runnableの上に別のものを作っているときに起こっているように見えるのは、既に実行を倍増させているので、いつでも速く高速に進むことができます。あなたのスレッドはthread.sleep()のようなものか、スクリーンをロックするときには何か似たようなものになるので、新しいRunnableを作り直すのではなく、スレッドの途中から始めるだけです。

新しいRunnableonCreateメソッドで作成している場合。電話機が回転したとき、または電話機が再開したときなどに呼び出されると、この問題が発生している可能性があります。アプリを再起動すると、Runnableが一度作成され、電話のロックを解除してから再開するまでの間、アプリが再起動されるからです。finish()また、あなたのスレッドを処理するために使用できる内部クラスを見てみたい:これは/一時停止、再起動する必要がスレッドを扱うに役立つかもしれない

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

ダンノーゲームではどうやって動作するのだろうか?

幸運にもこれは役に立ちます。

+0

多くのありがとうございました!スレッドをonPauseでスリープさせ、それを再開するResume this? – GuyWhoNeedsHelp

+0

問題ありません!それは私にはかなり論理的に思えます。それを試してください、うまくいけばそれはそれを修正します。うれしい私はいくつかの助けになることができます。 – Wolfcow

+0

あなたはそれを働かせることができましたか? – Wolfcow

関連する問題