Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android手機 >> Android手機教程 >> 進階使用 >> 技術貼:Android系統是如何進行工作的

技術貼:Android系統是如何進行工作的

編輯:進階使用

  Android系統在短短的幾年時間內成為了全球第一大手機系統,什麼是導致了Android如何迅速的普及呢?相信Android一定有什麼過人的地方。本文就為大家帶來Android系統的工作原理,幫助大家更好的認識Android。

技術貼:Android系統是如何進行工作的
Android系統是如何進行工作的

  下載了Android的SDK和一些輔助的玩意我就開始折騰了,IDE是Eclipse。Android開發的屏幕布局采用XML布局方式,部分資源,包括字符串、控件等等以XML的形式聲明在res文件夾下,在主程序中調用,很常見的情況是在XML文件裡聲明控件,比如TextView之類的,然後再主程序中new一個控件,直接調用XML聲明的相應部分。而在XML文件中,已經把該資源的全部屬性設定好,包括長、寬、字體大小、顏色等。這無形中把資源給“模塊化”了。

  android基於Linux內核這種事已經不算新鮮事了,很多系統都基於Linux內核。但是android的特別之處除了開發上的特點以外,還有一個就是程序在運行時的行為和以往我接觸到的程序運行機制有很大不同。在傳統PC機或者其他一些手機上,用戶對應用程序有絕對的掌控權,在應用程序的系統菜單上選擇“退出”或者“關閉”之類的選項會直接殺死進程,而在android系統中不是這樣的。在android中,應用程序的生命周期並不是由應用程序自身直接控制的,而是由系統,當系統需要釋放內存來運行新進程或者保證某些後台進程和前端進程順利執行的時候才會釋放相應應用程序的資源,這個釋放過程有一個重要性的層次。

  android中進程的層次如下(重要性由高到低):

  1、前端進程。顧名思義,前端進程就是目前顯示在屏幕上和用戶交互的進程,在系統中前端進程數量很少,而這種進程是對用戶體驗的影響最大,只有系統的內存稀少到不足以維持和用戶的基本交互時才會銷毀前端進程。因此這種進程重要性是最高的。

  2、可見進程。可見進程也擁有一個可視化的界面,只是目前不是最上層界面(最上層界面在前端進程裡面),可見進程一般調用了OnPause(),可見進程比前端進程重要性低,但是在交互方面影響還是很大,因為用戶可能隨時切換過去,所以系統不會輕易銷毀它。

  3、服務進程。一個服務進程就是一個Service,它調用了startService(),就是UNIX中說的守護進程,對用戶不可見,但是保證了一些重要的事件被監聽或者維持著某些狀態,比如網絡數據傳輸、後台音樂播放,這類進程在內存不足且為了保證前端交互的順利進行的時候被銷毀。

  4、後台進程。這裡叫後台進程可能會和一般意義上的後台進程混淆,要說明的是,android裡的後台進程是調用了OnStop()的,可以理解成用戶暫時沒有和這個進程交互的願望,所以這裡後台進程有點“待銷毀”的意思。

  5、空進程。這是一種系統緩存機制,其實就是個進程的外殼,當有新進程創建的時候,這個空進程可以加快進程創建速度,當系統內存不足的時候,首先銷毀空進程。

  android中進程重要性層次

  說了程序運行機制就不得不來看看一個進程從創建到被銷毀的全過程:

  進程從創建到被銷毀全過程

  一個進程創建時系統會為它創建一個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()調用是在系統內存不足的時候由系統調用來銷毀進程和釋放內存的。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved