揭秘Android App的工作原理-樂居貓學Android開發

來源:互聯網
上載者:User

標籤:android開發

Android App的工作原理
Android系統是基於liunx核心的,但是與傳統的基於liunx的pc系統不同,使用者對Android app沒有絕對的掌控權。pc系統中,在應用程式的系統功能表上選擇“退出”或者“關閉”之類的選項會直接殺死進程。在Android系統中不是這樣的。而是由系統,當系統需要釋放記憶體來運行新進程或者保證某些後台進程和前端進程順利執行的時候才會釋放相應應用程式的資源,這個釋放過程有一個重要性的層次,接下來就聽樂居貓做一下說明:

android中進程的層次如下(重要性由高到低):
    1、前端進程。顧名思義,前端進程就是目前顯示在螢幕上和使用者互動的進程,在系統中前端進程數量很少,而這種進程是對使用者體驗的影響最大,只有系統的記憶體稀少到不足以維持和使用者的基本互動時才會銷毀前端進程。因此這種進程重要性是最高的。
    2、可見進程。可見進程也擁有一個可視化的介面,只是目前不是最上層介面(最上層介面在前端進程裡面),可見進程一般調用了OnPause(),可見進程比前端進程重要性低,但是在互動方面影響還是很大,因為使用者可能隨時切換過去,所以系統不會輕易銷毀它。
    3、服務進程。一個服務進程就是一個Service,它調用了startService(),就是UNIX中說的守護進程,對使用者不可見,但是保證了一些重要的事件被監聽或者維持著某些狀態,比如網路資料轉送、後台音樂播放,這類進程在記憶體不足且為了保證前端互動的順利進行的時候被銷毀。
    4、後台進程。這裡叫後台進程可能會和一般意義上的後台進程混淆,要說明的是,android裡的後台進程是調用了OnStop()的,可以理解成使用者暫時沒有和這個進程互動的願望,所以這裡後台進程有點“待銷毀”的意思。
    5、空進程。這是一種系統緩衝機制,其實就是個進程的外殼,當有新進程建立的時候,這個空進程可以加快進程建立速度,當系統記憶體不足的時候,首先銷毀空進程。
android中進程重要性層次

接下來結合Android Activity的生命週期來說明一下:


 

一個進程建立時系統會為它建立一個Activity(活動),緊接著調用onCreate(),onCreate()中主要是進行一些初始化,例如讀取XML資源檔建立布局,設定主介面各種監聽函數等等,每個進程都會調用onCreate()。


     接著是onStart(),需要說明的是,在預設 Activity中(就是程式一啟動我們看到的那個Activity實體),程式員在寫代碼的時候並不需要顯式去調用onStart(),系統會默默幫你調用;但是,當你需要在這個程式中建立除了預設Activity以外的所有新Activity的時候,你必須顯式調用這個onStart(),這個 onStart()有個新名字叫做startActivity(intent),這裡的intent表示一個意圖,就是我們想建立的新Activity。
     然後是onResume(),當我們從主程式介面跳到別的地方再跳回來的時候調用onResume()。然後程式就跑起來了,我們叫他進程 A,如果這個時候其他進程變成了前端進程(進程B),此時進程A就會調用onPause(),這會儲存進程的狀態做資料持久化。這時候有兩種情況,進程A 再次成為前端進程,於是進程A調用onResume()來恢複運行;如果在進程A處於onPause()這段時間內系統記憶體不足了,進程A就有可能被銷毀,來為別的進程騰出記憶體(為什麼是“可能”被銷毀?詳見上面的android進程重要性層次說明),如果使用者再次切換到進程A,這是系統只是重新建立一個進程,它不再是進程A了(因為此時進程A已經被銷毀了)。


        當onPause()被調用以後使用者按了返回鍵(back),那進程A會調用 onStop(),之前說了使用者此時已經沒有和進程A互動的願望了,所以進程A成為了“待銷毀”的對象(為什麼沒有直接銷毀呢?答案還是在android 進程重要性層次說明)。那麼如果在一個進程A還沒有被銷毀的時刻使用者再次切換到進程A,進程A又成為了前端進程,此時進程A會調用 onRestart(),進而調用onStart()來再次開始進程(此時重新開始的還是進程A本身,沒有換成其他的,因為進程A還未被銷毀),在這裡可以理解成把進程A“喚醒”了。如果很不幸,系統記憶體又不足了,調用了onStop()後的進程A可能再次被銷毀,就像圖上畫的那樣,這裡不再贅述。至於 onStop()後面的onDestroy()調用是在系統記憶體不足的時候由系統調用來銷毀進程和釋放記憶體的。

揭秘Android App的工作原理-樂居貓學Android開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.