2013-01-13 30 views
0

我試着製作我的第一個android應用程序。它運行良好,但奇怪的是,當我暫停然後恢復主要活動時(基本上顯示設置菜單時)應用程序FPS減少了很多,我不知道爲什麼。恢復活動時FPS減少

這裏是我的結構:
DrawView是一個實現View類的類,它有一個「更新」方法,它在每個幀(計算和繪圖)上執行這些操作。
主要活動創建一個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計數器,我注意到,從100+的FPS降在開始時到60開幕後的最高限額,然後關閉優先活動。

我不明白我的錯誤在哪裏。

回答

1

原因很簡單:您發佈Runnable對象兩次(在onCreateonResume方法)和DrawView.update()實際上會更經常超過每10毫秒調用一次。

Activity暫停時,請致電myHandler.removeCallbacks(myRunnable)並刪除BOTH以前添加的對象。在Activity恢復之後,您再次發佈Runnable,但僅一次(因爲未調用「onCreate」)。

+0

哦,謝謝,現在看來很明顯。我不知道OnResume在活動開始時被稱爲。 –