[瀬戸のテーマ] Android 分享 - 系統保養大法心得

多工系統,Multi-task System
這個字眼其實是針對使用者和程式開發者多於系統本身,因為這世上沒有一個系統不是多工的。
那麼,為什麼又會有這個術語?
原因很簡單,因為其實多工指的並非系統本身,而是操作環境。
多工和非多工的操作環境有何分別?
系統在執行一個程序時,會有以下幾個步驟:
    1. 把主程式放到 RAM 中
    2. 在 RAM 中執行程序
    3. 依照程序的需要,把 RAM 分給該程序使用
在執行程序時,多工和非多工操作環境是沒有分別的,而分別在程序結束時。

多工操作環境:
  1. 把分給該程序使用的 RAM 回收
  2. 如程序本身沒有設定自行關閉的話,會把主程式留在 RAM 中
  3. 如該程序沒有工作的話,就會在背景待命,否則就是背景執行。
非多工操作環境:
  1. 強制關閉該程序
  2. 把分給該程序使用的 RAM 回收
  3. 把主程式從 RAM 中移除,取回記憶體
說到這裡,多工與非多工的分別大家就會很清楚了。
這是非多工環境的 Iphone、Featured Phone 和多工環境的 Windows Mobile(WM)、Symbian、Android 最大的分別。
Iphone 永遠有足夠的 RAM 去給系統運作,所以永保系統運作的順暢度。
而 WM、Symbian、Android 這類多工系統,在執行一定數量的程序後,系統便會變鈍。
那麼多工系統沒有辦法永保系統的順暢度嗎?
多工系統對使用者來說,最大的課題是如何管理記憶體。
在我們的桌上電腦,記憶體通常是足夠,但在手提裝置上,記憶體是經常不足的。
在這裡雖然只談 Android 系統,不過 WM 和 Symbian 的處理方法是一樣的,在記憶體降至一定水平後,系統就會因記憶體不足而變得鈍鈍的,這時只要把記憶體釋放出來就可以。

Android 還是初生之犢,還沒有很優秀的系統管理工具能實現無腦操作,所以在說明方法前,先來說說在多工系統的操作環境中,已開啟的程序可以分為以下幾種:
  1. 前景執行 - 指正在運作中,可以看到其介面的程序
  2. 背景執行 - 指正在運作中,但不可以看到其介面的程序
  3. 待命 - 開啟了但沒有運作的程序,可以是前景,可以是背景
  4. 系統常註 - 系統的程序,通常為背景執行或在背景待命,使用者沒有控制權限
  5. 其他常註 - 非系統的程序,但必需保持在背景執行或背景待命,使用者有控制權限
上述比較重要的是 4 和 5 的常註程序。
系統常註的程序,我們永遠不要動。雖然沒有權限,但有權限也不要動。
其他常註的程序,我們也不要動,這些程序被關閉後不久,會自動在背景重啟,這樣系統反而會不久就鈍一下。而且強制關閉這些程序,可能會令其運作中的資料也一併消除,有很大的可能出現不穩定的狀況,影響系統的運作。
至於 1 至 3 這些非常註的程序,就是奪回貴重記憶體的開刀處。
如何分辨常註和非常註的程序?
其實方法很簡單,在系統啟動完成後,執行中的程序就是常註的程序了。
這些程序包括:

  1. 系統運作必要的程序 - 系統本身、所有硬體控制程序
  2. 使用者設置的程序 - Widgets、系統工具等等
為保有系統的穩定性,這類程序我們絕對不要強制關閉。
現時有那些系統管理工具?
Android 系統本身沒有這類系統管理工具。
而第三方就有數款:

  • Advanced Task Manager - 功能強大,有好好的分類、系統資料、Ignore List,不過分類有些含糊不清,對不熟識系統運作的使用者來說非常不利。而且經測試一段時間後,其使用時間越長,對系統的負擔越重,本末倒置。
  • TasKiller - 沒有分類,但不會顯示系統常註程序,有 Ignore List,介面簡單易用。經測試後非常穩定,是新手的必然之選。
其實還有一兩個,但因為本身沒有很好的功能,也有令系統不穩定的情況,所以不說了。
所以在經過每星期不關機的測試後,暫時最好的管理工具是 TasKiller。

關於 TasKiller
TasKiller 有分免費版和收費的 Full 版本,小弟是用 Full 版本的。
以下是 TasKiller 的說明和設定:

capture01 capture02
在安裝好 TasKiller Full 後,除了主程式外,還外加兩個 Widgets。
小的紅色機器人,是一鍵關閉所有非常註程序的 Widgets。
而佔地 1x3 的長方型 Widgets,會顯示在背景中運作或待命的程序,按一下該程序的圖示,會關閉該程序,而按一下紅色機器人就會把全部程序關閉。還會顯示剩餘的記憶體。

這時甚麼也不要做,重新啟動機器。
重啟後,甚麼也不要做,先開啟 TasKiller 主程式。
capture03 capture04
在機子剛啟動的這個狀態下,這一堆就是使用者設置的常註程序列表。
在程序上長按一會,出現選項,選 Ignore,這個程序就會放到 Ignore List。
把這裡所有程序也放到 Ignore List 中,TasKiller 不用。
Ignore List 中的程序是不會被 TasKiller 強制關閉。
我是把所有安裝好的輸入法也放到 Ignore List 中的。
另外,如果有用 Google 定位跟朋友分享位置的話,最好也把那些 com.google.android.apps.maps:xxx 這些程序也加到 Ignore List 中,因小弟試過強制關閉她們後,令她們發脾氣,最後令系統不太穩定。
還有就是把一些如音樂、鬧鐘和 HTC Sync 也加到 Ignore List,因為這些如被強制關閉後,會有甚麼後果也不出奇。

capture05
設定好後,按一下 MENU 鍵,選 Settings。

capture06 capture07
把 Hide ignored application 勾選,那麼 Ignore List 中的程序就不會被顯示出來。
按一下 Ignore List 後,就會列出 Ignore List 中的所有項目,不管是不是已開啟,也會顯示出來。
按一下 Clear 會清空 Ignore List,如要清除其中一項,要進入 Ignore List,長按該項目後選 Remove 就可以。

capture08 capture09
這樣,只要在 Widget 上按一下紅色機器人,就可以把非常註的程序全部關閉。
還可以使用自訂圖案

但要留意,如果新增了 Widget 的話,記緊把該 Widget 程序放到 Ignore List 中。
何時才是按下紅色機器人的最好時機?
其實,每個程序在進入待命前,是需要一些時間的。這些時間是用來把處理中的資料記錄下來,令下次起動時能正常回到上次的工作環境。
所以在使用完後,等上最少十秒鐘,才按下紅色機器人。

不過,其實也不用經常按的。
Android 系統在運行時,有 30M 的記憶體也是很順暢的,所以在記憶體餘下不足 50M 時,才去處理也沒有問題。
開機後不久,記憶體只剩不到 50M 了,為甚麼?
在 Home 畫面中的每個物件,包括 Widgets、程式捷徑等等,會佔用到記憶體,一些 Widgets 的運作會佔較多記憶體,也有一些第三方程式會常註在系統中背景運作,亦會佔用較多的記憶體。
由於每個人所需不同,所以要針對自己的用途來選擇。
請解除安裝那些不會用到的 Widgets,因為他們會靜靜地在背景常註待命,佔用記憶體。
程式捷徑可以放到資料夾中,這樣在開啟資料夾時才會佔用記憶體,關閉後不久就會把記憶體釋放出來。
Home 運作不順暢,但記憶體有很多,超過 50M,為甚麼?
如果是 Android 本身的三頁 Home 的話是沒有問題的。
如果是一些第三方的 Home,有可能是該 Home 的穩定性不足所至。
小弟用過 AHome、OpenHome 和 FreshFace 三個 Home 程式,最穩定和功能足夠的是 OpenHome。
有時也會是 Widgets 引致系統不穩定,可以嘗試把 Widget 逐一從 Home 中移走,去看看那個 Widget 出問題。
如果像 AHome 和 OpenHome 這類可以旋轉的 Home,會不停偵測 G-Sensor 的,所以會令系統長時間繁忙。小弟是用 OpenHome 的,我在手機的設定中把 G-Sensor 關掉,令系統有足夠的休息。因為關掉 G-Senor 後,Internet Browser、Office 之類需要旋轉屏幕的軟件還是可以正常旋轉屏幕,所以並不會產生不便。而且關掉 G-Sensor 有效節省電源,是一個很好的方案。
那麼,版主的使用結果如何?
小弟在四日前把數款系統管理工具測試完成,也把一些其他的程式也一併測試完成。
手上的 Magic 已經持續開啟了超過 80 小時,在清空非常註程序後,記憶體還保持在 70M 前後,系統保持穩定,運作也保持暢順,非常完美。
而且這個 70M 前後的結果,是又第二日開始便保持這個水平,也就是說系統中並沒有一些奇怪的東西把記憶體暗槓起來。

可惜的是,小弟原本是打算拍下手機的運作放到 YouTube 的,不過在寫這編 Android 分享第一編時,跟上述程序把手機重啟了。
所以要待數天後,好讓手機運行了數天,來証明小弟這套系統保養大法是非常完美。
下回預告:
    • 如何捕捉 Android 手機的屏幕影像(包含在 64-bit 系統下使用 DDMS 說明)
    • 一些強大的必玩程式推介(不定時更新)
    • YouTube 大放送,Android 保養大法下的 Magic。
    • 未定……

留言

此網誌的熱門文章

[教學]一起來開發遊戲吧 - Unity C# 基礎

QUMARION

[教學]一起來開發遊戲吧(三) - Scene Builder, Manager Loader, Enemy Behavior