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

addre wrote:
幫主 wrote:
就使用Exit來退出AP. 不過這也需要...(恕刪)

這不該由 AP 來實作, Android 已提供這樣的功能.

Android 的使用者應養成透過 Back (返回) 鍵離開程式的習慣, 而非透過 Home 鍵直接跳回主頁面.
返回鍵會促使系統關閉該程式 (技術上來說, 是執行 Activity 的 onDestroy 函式), 但 Home 鍵並不會.

之前一直很納悶, 為什麼我所看到的 AP 都會在離開後關閉, 但很多網友都說不會...
還必需透過系統管理工具來清除已經不必要的 AP...
直到前一陣子才發現, 因為我都是按 Back 鍵離開程式, 但許多人都是用 Home 鍵直接跳回主頁面......(恕刪)




大大講的很好 我又學到了 BACK 跟HOME的差別了
畢竟在Android 我個人會儘量去學習該系統的作業模式
才不會辜負我選擇Android 系統 所帶給我的好處

以上是我個人觀點 也感謝一些高手技術與心得分享

看到你們的討論,我從 android sdk 裡找了一張 android 程式的生命週期的圖解。


大概解釋一下這張圖片在講什麼。

onCreate() : 代表程式一開始被執行的階段,很多該做的事前準備工作,大部份都會在這裡做完。
onResume() : 代表程式已經開始執行,而且你可以從手機上看到程式的執行了。大部份的操作及互動都會在這裡。
onPause() : 代表程式已經在手機上看不到了,你不管是按下 back 或是 按下 home,程式暫時停止運作,就會跑來這裡。通常是讓程式做一些存檔或是關閉 gps/senser 這些動作。android 為了加速程式執行的效率,下次再執行程式的時候,就直接進入 onResume() 階段,讓使用者覺得不用等待。這也就是為何大家會覺得 android 的記憶體似乎吃很兇的感覺。

android 在執行記憶回收的時候,一定是程式進入 onPause() 或是 onStop() 階段才會將程式完全關閉,並且回收記憶體。

前面有人提到結束程式要按 back 不要按 home,基本上是沒啥差別的。
夜觀南十字星 足踏大鵬灣浪
simonchung wrote:
看到你們的討論,我從...(恕刪)


圖很詳細,大大也解釋的很清楚

但是實際上是有點出入的

以AppManager來說按Home鍵Process會存在,而且使用Adavanced Task Manager看會存在

而按Back鍵則Process會消失,而且使用Adavanced Task Manager看也不存在

理論上流程會跟圖一樣,但實際上還是要看程式開發者的撰寫模式
simonchung wrote:
看到你們的討論,我從...(恕刪)

您有些許的誤解唷...
這張圖是解釋 Activity 的生命週期, 非 Process, 所謂的 Activity 可約略稱之為畫面.

舉個郵件程式的例子

1. 開啟郵件程式時, 會先看到第一個 "郵件列表" 的 Activity
"郵件列表" onCreate -> onStart -> onResume

2. 當列表上的某封郵件被點選, 則會開啟另一個 "郵件內容" 的 Activity, "郵件列表" 則被暫停
"郵件列表" onResume -> onPause
"郵件內容" onCreate -> onStart -> onResume

3. 當在 "郵件內容" 畫面上按下 Back 鍵時, "郵件列表"會被叫起, 而"郵件內容" Activity 因屬於最上層的畫面, 它不僅被暫停, 還會被移除
"郵件列表" onPause -> onResume
"郵件內容" onResume -> onPause -> onStop -> onDestroy

4. 當在 "郵件內容" 畫面上按下 Back 鍵, 則"郵件內容" Activity 將被移除
"郵件列表" onResume -> onPause -> onStop -> onDestroy

5. 如果在第四步按 Home 鍵, 則"郵件列表" Activity 將不會被移除
"郵件列表" onResume -> onPause -> onStop(是否進入 onStop, 沒仔細研究, 僅知不會進入 onDestroy)

雖然圖中的 onPause 與 onStop 畫了一條指向 Process killed 的線, 但不代表在這個狀態下的 Activity 直接就被移除, 它的意思是, 當系統需要更多的記憶體時, 處在這個狀態下的 Activity 是可能被系統選定去殺頭的.

但即將被殺頭的 Activity 必然會先進入 onDestroy, 這是提供給程式撰寫作最後收尾的地方. 該存檔的, 該關的, 該釋放的一切東西, 都必需在這個階段或之前處理好. 換句話說, 這是 Activity 的最後一口氣, 該交待的都得交待清楚...

相關的說明, 可看看 Android 對於 Activity 生命週期的說明影片.
http://www.youtube.com/watch?v=fL6gSd4ugSI&feature=player_embedded
addre 兄說的第五點, 按 home最後是會進入 onStop(), 這時Activity已經看不見了.

我想有些大大可能誤會了, 以為activity 的生命週期就是process 的生命週期.
簡單來說, process是AP主要的執行程序, Activity只是由process再開啟的畫面, 當畫面消失或被destroy, 也只是該畫面的事, AP的執行程序process還在, 所以不管按back或home, 用task killer都還是可以看到該AP的.

有興趣的大大可以在主Activity的onDestroy()最後, 加上一行
System.exit(1);
再用 task killer 去看看AP 還在不在, 就明瞭了.
幫主 wrote:
有些大大可能誤會了, 以為activity 的生命週期就是process 的生命週 ...(恕刪)

其實我一開始也誤會了, 我一直用 Activity 的角度在想事情, 我一直不解為什麼其它大大說關掉程式後, 還得用系統管理工具去殺程式...

直到看到您之前的文, 我才驚覺, 其它大大說的是 Process, 而我說的是 Activity...
真的是雞同鴨講呀...
addre wrote:
Android 的使用者應養成透過 Back (返回) 鍵離開程式的習慣, 而非透過 Home 鍵直接跳回主頁面.
返回鍵會促使系統關閉該程式 (技術上來說, 是執行 Activity 的 onDestroy 函式), 但 Home 鍵並不會....(恕刪)


小弟是玩過很多軟體的心得是
Home鍵就不提了,除非程式有背景作業時自動關閉的設計,不然Home鍵不會有關閉程式的作用
有些程式常常需要在背景作業,所以它的back鍵不會離開程式,但是會在menu內設計獨立的離開鍵,如KKBOX
有些程式不太需要在背景作業,所以back就可以關閉它,真的要它在背景run就要動用Home鍵
有些設計不好的程式,不管你按什麼鍵它都不會關閉,menu內頁也沒做離開鍵,這作者就要好好檢討了,此類程式只能動用task manage之類的程式來強制關閉

目前比較困擾我的問題是,目前很多軟體會動用到瀏覽器的架構
但是...舉最簡單的開網頁來說,連續閱讀了數十個網頁後
想要用back來關閉瀏覽器竟然要按數十次??!!
不然就是要開軟體直接kill掉
好不人性化~不知道是不是有什麼特殊按法可以強制關閉程式的?
back鍵要當上一頁又要當離開鍵,只會讓我很不想開網頁
其實有沒有關都沒差,就算你開再多程式,系統還是會預留記憶體大約28MB~31MB之間。
為保持系統的流暢性。
因此順暢度是取決於CPU的速度,之後HTC新規格的1Ghz,想必還是決勝的關鍵。
如果 Android 到最後如各位大大所言,還是得靠硬體去撐起系統效能的話
我想 Android 可能只會是另一個 Windows Mobile 而已吧...

我不知道我這個推論對還是不對
但是從廠商可以『一機兩賣』的銷售模式,我猜 Android 到最後還是跟 Windows Mobile 一樣在打規格戰而已。

若有錯誤請各位大大指正,謝謝
vincent411 wrote:
其實有沒有關都沒差,就算你開再多程式,系統還是會預留記憶體大約28MB~31MB之間。
為保持系統的流暢性。
因此順暢度是取決於CPU的速度,之後HTC新規格的1Ghz,想必還是決勝的關鍵。
生平最恨只有一張嘴,而毫無半分建樹的人!

我補充一下,無論你是按下 home 或是 back 或是電話來了,正在執行中的 activity 都會不見,也就是會執行到 onPause(),但是 process 並沒有消失。process 要不要停止,都是程式設計人員的考量。有些大大觀察到按下 home 或是 back 的差異,只是我想是該程式設計人員在設計上的考量。畢竟 android 已經唱高調,說記憶體不足他會處理,自然就有人不會去在意 process 的處理。
夜觀南十字星 足踏大鵬灣浪
文章分享
評分
評分
複製連結

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