Android – Activity / Service 的生命狀態

之前在學習 android app 開發所做的筆記,在此記錄一下.

每個Activity有四個生命狀態:

  • Active/Running:當一個Activity在螢幕的最上層時(堆疊的最頂端),它就是屬於Active或Running的狀態

  • Paused:如果一個Activity失去焦點(focus)但還看得到它的畫面,那失去焦點的這個Activity則處在Paused的狀態。失去焦點的Activity它還是完全活著的,並沒有消失。(活著的意思是指Activity自已本身所有的狀態及資料都還是存在的也跟視窗管理程式window manager保持連繫著)像這種Paused的Activity,可能在系統的記憶體不足的時後,被系統自動移除掉

  • Stopped:如果一個Activity被其它的Activity完全的遮住時,這個被遮的Activity處於stop的狀態,它仍然保有全部的狀態及資料,但因為它已不再被使用者看見,所以它的畫面是被隱藏起來的(畫面不需要更新)。當系統記憶體不足時,這種Stop狀態的Activity是最先被系統考慮拿來釋放記憶體的

  • Finished: 當一個Activity處於Pause或Stop的狀態時,系統可以要求Activity結束(Finish)或直接移除(Kill)它。當它需要再度呈現在使用者面前時,它必需要能完整的重新啟動及回復先前的狀態

每個Service有兩種生命狀態:

  • Started:當一個組件(例如:一個Activity)呼叫startService()的時候,Service就進入Started狀態。一個Service一旦被啟動,就會一直在背景運行,就算啟動的組件被關閉還是繼續運行。

    一般而言,一個被啟動的Service只會執行一個功能,執行完畢後並不會回傳結果給啟動的組件。例如:某個Service會透過網路下載或上傳一個檔案。當傳輸工作結束,該Service應該自動關閉。

  • Bound:當一個組件(例如:一個Activity)呼叫bindService()的時候,Service就進入Bound狀態。
    處於Bound狀態的Service,和呼叫的組件的關係類似client-server介面,讓組件和Service互相溝通、傳送與接收信息,甚至可以透過IPC跨process交換信息。

    一個處於Bound狀態的Service,只要有一個對應的組件就會運行。多個組件可以同時bind到同一個Service,但當所有的組件unbind的話,該Service也會關閉。

留言

這個網誌中的熱門文章

WPF - 深入 Style

C# – M$ Chart Control 自定 ToolTip 的顯示

Vue.js - 基礎介紹教學