java - 恢复 Activity 时 FPS 降低

标签 java android

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

这是我的结构:
DrawView 是一个使用“更新”方法实现 View 类的类,该方法在每一帧执行这些操作(计算和绘图)。
主要 Activity 创建一个 DrawView(作为内容 View ),并使用 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 计数器,我注意到在打开然后关闭首选项 Activity 后,FPS 从开始时的 100+ 下降到 60 的上限。

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

最佳答案

原因很简单:您两次发布 Runnable 对象(在 onCreateonResume 方法中)和 DrawView.update( ) 实际上每 10 毫秒调用一次以上。

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

关于java - 恢复 Activity 时 FPS 降低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14302322/

相关文章:

Java 日期格式常量名称约定

java - 如何在 leiningen 中的 Clojure 代码之后编译 Java 代码

android - 将推送通知从 Android 发送到 iOS,反之亦然?

Java/安卓 : Synchronized vs Queue implementation

android - 滚动时带阴影效果的透明工具栏

java - 如何像从浏览器发送一样发送 get 请求

java - 如何获得最接近的十分之一

java - Slick2D + Tiled 无法加载 map

安卓自定义: swipe toggle button with image

android - 错误 :failed to find target with hash string 'android-23'