0

初めてのAndroidアプリを作ってみました。それはうまく機能しますが、奇妙なことに、一時停止してからメインのアクティビティを再開すると(基本的に設定メニューを表示するとき)、アプリケーションの FPS が大幅に低下し、その理由がわかりません。

これが私の構造です:
DrawView は、各フレームで処理 (計算と描画) を行う「更新」メソッドを使用して View クラスを実装するクラスです。
メイン アクティビティは DrawView を (コンテンツ ビューとして) 作成し、Handler と Runnable を使用して 10 ミリ秒ごとに更新するように要求します。

Main.java の (簡略化された) コードは次のとおりです。

public class Main extends Activity {
    DrawView drawView;
    private Handler myHandler;
    private Runnable myRunnable = new Runnable() {
        public void run() {
            drawView.update();
            myHandler.postDelayed(this, 10);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        drawView = new DrawView(this);
        setContentView(drawView);
        myHandler = new Handler();
        myHandler.post(myRunnable);
    }

    @Override
    protected void onPause() {
        super.onPause();
        if(myHandler != null) myHandler.removeCallbacks(myRunnable);
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(myHandler != null) myHandler.post(myRunnable);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId())
        {
        case R.id.menu_close:
            finish();
            break;
        case R.id.menu_settings:
            Intent settingsActivity = new Intent(getBaseContext(), Preferences.class);
            startActivity(settingsActivity);
        }
        return super.onOptionsItemSelected(item);
    }
}

DrawView.update メソッドに FPS カウンターを実装することで、初期設定アクティビティを開いて閉じると、FPS が最初は 100+ から上限の 60 まで低下することに気付きました。

どこが間違っているのか分かりません。

4

1 に答える 1

1

Runnable理由は簡単です。オブジェクトを 2 回 (onCreateおよびonResumeメソッドで)投稿すると、DrawView.update()実際には 10 ミリ秒ごとに 1 回以上呼び出されるからです。

が一時停止されているときActivityに呼び出すと、以前に追加された両方myHandler.removeCallbacks(myRunnable)のオブジェクトが削除されます。再開した後、もう一度投稿しますが、1 回だけです (「onCreate」が呼び出されないため)。ActivityRunnable

于 2013-01-13T14:41:02.523 に答える