我尝试制作我的第一个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的上限。
我不明白我的错误在哪里。
答案 0 :(得分:1)
原因很简单:您将Runnable
个对象发布两次(onCreate
和onResume
种方法)DrawView.update()
实际上每10 ms会调用一次以上
暂停Activity
后,您拨打myHandler.removeCallbacks(myRunnable)
,然后移除之前添加的 BOTH 对象。恢复Activity
后,您再次发布Runnable
但只发布一次(因为'onCreate'未被调用)。