恢复活动时减少FPS

时间:2013-01-13 09:40:48

标签: java android

我尝试制作我的第一个Android应用程序。它运行良好,但奇怪的是当我暂停然后恢复主要活动(基本上在显示设置菜单时)应用程序FPS减少了很多,我不知道为什么。

这是我的结构:
DrawView是一个实现View类的类,带有" update"在每一帧中进行填充的方法(计算和绘图) 主要活动创建一个DrawView(作为内容视图),并使用Handler和Runnable请求它每10ms刷新一次。

以下是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+下降到打开然后关闭首选项Activity后的60的上限。

我不明白我的错误在哪里。

1 个答案:

答案 0 :(得分:1)

原因很简单:您将Runnable个对象发布两次(onCreateonResume种方法)DrawView.update()实际上每10 ms会调用一次以上

暂停Activity后,您拨打myHandler.removeCallbacks(myRunnable),然后移除之前添加的 BOTH 对象。恢复Activity后,您再次发布Runnable但只发布一次(因为'onCreate'未被调用)。