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

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

4

1 回答 1

1

原因很简单:您Runnable两次(在onCreateonResume方法中)发布您的对象,DrawView.update()实际上每 10 毫秒会被调用一次而不是一次。

Activity暂停时,您调用myHandler.removeCallbacks(myRunnable)它会删除先前添加的两个对象Activity恢复后,您再次发布Runnable但仅发布一次(因为未调用“onCreate”)。

于 2013-01-13T14:41:02.523 回答