2012-07-18 52 views
1

當有人在做一些遊戲,他們可以做到這一點是這樣的:mainActivity延伸Activity並在此主要活動有一個方法,如:如何使無限循環中的活動

setContentView(BouncingBallView); 

BouncingBallView延伸View和我們有方法:onDraw()invalidate()和這些方法是用來做更新,他們在所有幀中執行。

我的問題是我想有一些像「onDraw-invalidate」這樣的更新方法,但是在類Activity中不在View中。

我想知道是否有一些主循環,一直在執行某些update()的方法?我知道在Activity有:onCreate(); onStart(); onRestart(); onResume(); onPause(); onStop();和onDestroy(),但我看不到更新?我將如何做到這一點?

+0

聽起來像我想你想爲你的「無限」循環創建一個單獨的''線程''。 :) – ninetwozero 2012-07-18 08:57:09

回答

3

要定期更新嗎?然後一個計時器可能是一種方法。與期望的延遲創建您的活動的在onStart定時器的實例,並計劃更新任務如下:

public class MyActivity extends Activity { 
    ... 
    private Timer timer; 
    private BouncingBallView ballView; 

    ... 

    @Override 
    public void onResume() { 
    timer = new Timer(); 
    // This timer task will be executed every 1 sec. 
    timer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
     ballView.update(); 
     } 
    }, 0, 1000); 
    } 

    ... 

    @Override 
    public void onSuspend() { 
    // Suspend the updates when the activity is inactive. 
    timer.cancel(); 
    } 
} 

注意計時器任務在一個單獨的線程中運行,並在Android的修改UI元素在不同的線程他們創建的那個可能會導致問題。如果遇到這些問題,處理程序(android.os.Handler)會很有幫助,並且在Honeycomb中有更好的解決方案,但Timer/Handler組合在舊版本中運行良好。