Home 主頁 Service 服務計畫 Android App 手機程式 Expertise 專業領域 Blog 博客 Download 下載 FAQ 網頁製作常見問題 Support 支援 Links 友情連結 Contact Us 聯絡我們

2 - Android的Life Cycle

發佈: 08-04-2011

分類: Android 開發教學

第二課:Android的Life Cycle

lifecycle有什麼用?

由於你是直接建立繼承(extends)那4大元件的class,因此你可以override它們父類的method(如activity的onCreate())。你要 把自己的code加入各lifecycle method當中。同一個app中,會有多個元件,你要為每個元件的lifecycle作出按排。聽起來很難 ,其實都是千篇一律,多做幾次就不難了。

上圖是來自官方的activity lifecycle圖表。由於android是運行在mobile device上,process是隨時因為一些事件而暫停,或完 全終止。 當記憶體不夠事,一個不活躍的process很可能被終止,或是當你收到電話時,你正在運行的apps也會被暫停。因此,你要為這些 事情作出準備。 你的工作就是override這些methods,令你的apps在特定的時候執行相應的代碼。

當一個activity開始的時候,就會呼叫onCreate(),這也是最常用到的method。你可以在onCreate()中加上基本的 initialization,例如為activity選用一個xml的layout。與onCreate()相對的,就是onDestory(),它就是最後一個執行的 method。

接著onCreate()的就onStart(),可是如果這activity是已被停止了,在onStart()之前,就先執行onRestart()。 當activity可被user看到(visible),就會執行onStart()。與onStart()相對的就是onStop()。

當一個activity不是在最前面,就會執行onPause(),如回到foreground就會執行相對的onResume。如果該activity不在最前面, 而且不是visible的話就會執行onStop()。一旦在stop執行了,就不可能回到onResume(),要的就是執行onResume(),要的就是被 kill。

在圖中,當activity正在運行時,你可以看到如果其他application要更多memory,onPause被執行後,process很可能馬上被kill 。 由此可見,onStop是不一定保證可以執行的。因此,你可以在onPause中儲存當前的資料。

由於當activtiy不在最前或不是visible都會被pause或stop,如果你想執行一些長時間或後台的工作時,你應該考慮使用service ,因為它是沒有UI的,十分適合長時間執行。

Service 的life cycle

上圖是官方service lifecycle圖表。Service有兩種不同的lifecycle。

1.你可以通過startService()來啟動一個service。

2.你可以通過bindService()去建立一個對service的連接。這時你可以直接控制該service,當連接折斷後,就會執行 onUnbind()。

不論是那個方式,onCreate()都是最先執行的,而相應的onDestroy()都是最後執行的。

如以第一種方式,那你接著就會執行onStart(),當你想停止service的時候,你可以通過stopService()來停止。 如以第二種方式,那你接著就會執行onBind(),當連接你

當你使用startService()開始一個service時,onStart()就會被執行。當你使用stopService(),該服務就會停止。

當你通過bindService()去建立一個對service的連接時,onBind()就會執行,相對的就是onUnbind()。

訪客: Copyright ©2011 KF Software House 版權所有 | 網站地圖