我尝试制作我的第一个 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
对象(在 onCreate
和 onResume
方法中)和 DrawView.update( )
实际上每 10 毫秒调用一次以上。
当Activity
暂停时,您调用myHandler.removeCallbacks(myRunnable)
,它会删除BOTH之前添加的对象。在 Activity
恢复后,您再次发布 Runnable
但仅一次(因为未调用“onCreate”)。
关于java - 恢复 Activity 时 FPS 降低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14302322/