android 系統耗電. 跟執行的應用軟體數量關係?


TARO酥 wrote:


沒錯,大大您說到重點了,Back鍵是離開APP,Home鍵是回到桌面


Back鍵是離開??

但我用advanced Task Killer看時App還是存在的。

例如我開啟了PalmBook閱讀器,按Back鍵後,再開advanced Task Killer,PalmBook還是存在啊。

沒錯. Back和Home其實只差 onDestroy().

但是這是指Activity的onDestroy(), AP的process其實還在.
也就是說如果你沒有其他的thread在背景執行, 其實back是可以關掉你看到的Activity.
但是AP的主process還在, 當然如果沒有其他的thread在背景執行, 這樣應該是不耗什麼電的.
怕的是如果有AP create了thread在背景跑, 單單onDestroy()並不會停止AP, thread的執行還是在耗電.
除非onDestroy()時就把thread給停掉.
不管你用Back或Home, Advanced Task Killer 還是可以看的到, 因為process還在.
Advanced Task Killer 做的是真的把AP的process砍掉, 真的free出process執行時系統配給它的記憶體空間,
這時候AP才真的從系統裡消失.

系統在記憶體不夠時, 會開始清除idle太久的process, 這樣便會還回AP所佔的記憶體空間.
當系統開始有lag的感覺時, 記憶體已經不夠了, 系統卻還沒有開始砍process, 這就是我們感受與實際的落差.
或許如果可以提高系統開始砍process的時機點, 也許可以讓user不至於感到系統有lag.
所以大家為避免lag, 才會手動的去砍掉一些我們已經不用的process, 提高系統可用得記憶體空間.
幫主 wrote:
怕的是如果有AP create了thread在背景跑, 單單onDestroy()...(恕刪)


如果真的有這個情況, 那支程式的作者該抓去打屁股...
onDestroy 一如 WM 系統裡的 WM_CLOSE 訊息,
當 AP 收到這個訊息就該把該還的系統資源 (記憶體, 播音等) 全都還回去, 該關的東西 (檔案, 執行緒等) 關掉...
如果沒作好該作的事, 就會在系統裡留下一堆垃圾, 這是很骯髒的程式撰寫習慣...

有種狀況是, Process 裡包含了某種服務 (Service), Service 是不會隨著 AP 而關閉的...
通常服務都是需要在背景處理一些事情, 或是搜集某些資訊, 這些東西當然不該隨著 AP 而關閉...

除此之外, 殘存的 Process 不應該會耗費系統的資源...
有沒有透過系統管理程式來關, 不該有明顯的差別...
幫主 wrote:
沒錯. Back和H...(恕刪)


如 幫主 說的. 那些應用還在memory 中.
我們也不知道他是不是真的是在待命(真的沒作事), 還是偷偷作事.

或者是, 他真的沒作事, 可是系統中有一堆應用在時, 系統為了維護這些不作事的應用, 花了更多的資源, cpu 要運算更多的動作, 導致耗電.

而個人實驗. 跑很多個 app, 每一個都用 bcak 退出. 用 advanced Task Killer 去看有一堆 應用還在.
然後用 system monitor 這個app 去看 cpu usage 發現. 當有一堆 app 在時, cpu 使用量會增加

用advanced Task Killer 把app 砍光光, 在去看 cpu 使用量就下降.
另小弟常常會發現,一段時間沒有使用手機,當然也沒有開啟任何App。

但再使用時會發覺手機頓頓的,打開advanced Task Killer,

就看到一堆程式在裡頭,查一下記憶体只剩20mb,

全kill後記憶体還有70mb。

一直覺得很苦腦,明明沒有執行程式卻跑出一堆有的沒的,

如kkbox、音樂、相簿、設定、footprints、facebook、瀏覽器、Java、pc同步.....等等一堆。

常常要管理記憶体真的是很煩的一件事..............
我想以上這些問題
大概就像在平常我們用的電腦上
開了一堆程式 單單只按了"show desktop"
就以為程式關掉了 眼不見為淨吧

就像個人電腦剛普及時 很多剛接觸的人對電腦的概念不太懂
Android、WM也是 過個幾年普及了就比較不會有這種問題了一 一
addre兄,

我想Windows與Android設計的行為模式並不相同, 不能全以Windows的方式為主要判斷依據.

Android 是以 java為開發語言, 不只process的管理, 相信你也知道, 在JAVA裡連new 個 object或memory, 都不用我們去delete 掉它, JAVA有所謂的garbage collection的機制, 去管理及回收記憶體.
Android 裡的 onStop(), onDestroy()等, 做的是該Activity的管理動作, Activity可以把它視為是Windows系統裡的一個視窗(window), 而不是針對process本身. 所以 onDestroy只是結束 Activity. process 還是在系統裡的.

而Windows 的設計是當主視窗被 destroy時, 在 WM_DESTROY的預設動作便是會發出 WM_QUIT的flag, 會讓主視窗離開收message 的loop, 進而結束程式的執行, 是真正的結束process.
大家都很著重在記憶體本身的釋放造成效能的部份提升
不過程式的待命 也反應在使用程式時
省下重新啟動載入的時間
我是覺得只要系統控管的好
大家使用Back鍵離開不常用的APP
其實這樣的設計是不錯的

那如果說 ~ 一個程式 我在onDestory() 內或是 onStop() 把所有自己建立的thread關閉
這樣由back鍵 離開程式
這個程式就不會在留到Task內嗎?? ~

好像還是都會留在Task內 !!! 經過Task killer才會都被清除~

幫主 wrote:
JAVA有所謂的garbage collection的機制, 去管理及回收記憶體...(恕刪)


Java 雖有回收機制, 但程式撰寫者必需將需回收的記憶體物件連結解除, 系統方能進行回收. 如果撰寫者擅用 static, 且未將之設定為 null, 系統將認定該物件仍需被始用, 而留置在記憶體.

除了記憶體之外, 系統的資源則需在程式關閉前進行釋放. 包含不必要的執行序亦需將之中止與釋放, 否則這些被稱為"孤兒執行序" (orphan thread) 的垃圾, 將在系統裡流蕩.

當然, 砍掉 process 可以徹底解除上述的問題, 但這些問題並非肇因於 Android 的設計缺失, 而是來自於不良的程式撰寫習慣.

凱文蘇 wrote:
那如果說 ~ 一個程...(恕刪)

它的 process 會留著, 但 process 不應會造成多餘的資源消耗...
除非有漏網之魚在偷吃資源....
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!