[分享] Hero最佳化與最佳使用行為(觀念適用所有機種)

小布先生 wrote:
好啦,不針對謬論爭論...(恕刪)


你真的全部文章看完並用心了解了嗎?

什麼叫做「首先"自動內存管理"為必備程式」...

你說Background放超過5個程式會慢,那是指「執行記憶體低於30M時,系統又會無厘頭的巨慢」

Hidden Application: 48MB
Empty Application: 64MB

你懂上面兩設定的用意嗎?Hidden Application和Empty Application何時會回收,你知道嗎?

看不完全還說是謬論,你真的「自我感覺良好」.........
老實說,我還是覺得用Home去取代Back這件事有爭議

從效能角度來看
啟動app然後按Back離開再啟動app
*有刪減部份method
OnCreate->OnResume->OnPause->OnDestory->
OnCreate->OnResume


啟動app然後按Home離開再啟動app
OnCreate->OnResume->OnPause->
OnResume

Home的意思本來就是將app放到背景,所以app只會收到暫停的事件,這樣可以達到app間的切換
所以再次啟動的確會比較快,但是快多少我個人覺得要看app實作
但是其實後端app其實是還存在的,表示還是有可能會使用cpu
在加上無法大量的記憶體回收(GC),所以可能會佔用比較多的記憶體
不過程式如果沒寫好的話,就算是back他還是會佔cpu...
關於啟動時間在最後面會稍微講解一下Android的機制

我不支持用Home取代Back還有一個原因,盡量讓app跑完整的Life Cycle,因為你不確定app的實作
有些app會在最後離開的時候去做一些動作,儲存紀錄...之類的,或許還有其他動作....
只按Home可能會導致app不正常的結束


關於app的啟動時間(簡化流程,詳細請參考SDK),
1產生process
2.啟動provider(如果有的話)
3.啟動APP OnCreate
4.app顯示在前景


android的機制就是即使程式離開,process也不會被砍掉,所以一般啟動app會從3開始
但是當我們使用TaskKiller之類的東西,或是記憶體狀況超過系統設定下限(自動內存管理),系統會開始砍process
你下次啟動app會從1開始,所以會特別久,按Home後再啟動會從4開始(剛剛說過了)
這邊有些提昇啟動速度的原則就不在這邊講了,有空請到JavaWorld@TW的android版坐一下

以下是個人意見
----------
我個人認為Android的記憶體管理算是不錯的,問題在於下限值都設得太保守了
我不覺得這應該是使用者該去關心的,因為不同的機器本來就要有不同的設定值
這個值應該是要在出貨前,要在實驗室調好的.....
應該會有公司看到上面這句話吧...
misgod wrote:
老實說,我還是覺得用...(恕刪)


我很怕在這邊講太多艱深的事情,嚇走一般用戶不來看文章
因為我覺得對一般用戶而言,只要知道結果就好了
不過對有能力吸收背後觀念的人,對使用上的信心是有幫助的

我的回應如下:按Home鍵是不會重做onCreate()的哦!

按Home鍵之後是onPause -> onStop
按Back鍵是onPause -> onStop ->onDestroy

onStop SDK中提到Followed either by onRestart() if the activity is coming back to interact with the user, or by onDestroy() if this activity is going away.
所以按Home鍵退出,下次使用則直接進入onRestart,跳過onCreate

All activities must implement onCreate() to do the initial setup when the object is first instantiated.
這句話代表後面會做三件事
1. 將所有的數值,Layout等等準備好
2. 後面會做物件實體化的動作 (耗時)
3. 讓你看得到

按Home鍵,我們視覺上覺得變快了,最主要就是少做了OnCreate(),然後就不用作物件實體化的動作(尤其是User Interface的物件)

不管是按Home還是按Back,都會經歷onPause
我們來看看SDK的描述
This method is typically used to commit unsaved changes to persistent data, stop animations and other things that may be consuming CPU, and so on. It should do whatever it does very quickly, because the next activity will not be resumed until it returns.

onPause方法典型的用途如下:
1. 保存未存狀態
2. 將所有會耗CPU資源的,像是動畫或是其他等等停止下來
這裡面的程式碼做事要越快越好,否則下一個軟體的畫面會等他結束才會開始運作
所以我指的不好的程式,就是onCreate的撰寫沒把握以上的精髓


引用SDK => If an activity is paused or stopped, the system can drop it from memory either by asking it to finish (calling its finish() method), or simply killing its process. When it is displayed again to the user, it must be completely restarted and restored to its previous state.

系統回收Activity藉由呼叫 finish() 方法或單純砍掉其程序(如果finish無法使其結束的話)
如果該程式有在finish()裡寫好遺囑的話,OS還會幫忙處理後事(比如記得叫鬧鐘響)
如果單純用類似kill -9這種方法(TasKiller和其他可能都是用這種方法),該軟體的遺囑就來不及講
(砍時鐘,鬧鐘不響;砍股票,股市Widget不再更新;砍TasKiller,TasKiller的Widget不再更新其數字)
所以手動砍程式是不好的

題外話onPause寫不好,OnResume會無法回到原本的狀態,可能就會想整個砍掉重練,從onCreate再開始

test
"自動內存管理"有新版了
提供Process的OOM Priority
似乎代表了其回收的順序
並提供改變Priority的值
沒事的人看看就好,不要隨便亂動哦
test
嗯..我覺得你跟我說的是同一件事....你仔細看一下我上面說得
按Home的確會比較快一點,但是等於你把app常駐在背景
整體來看是不是有比較好的效益,沒有全盤的數據顯示(以長時間整個系統使用上來講,不以單一app啟動)

我想表達的重點是,每個app怎麼實作不是使用者可以控制的
以比較一般的想法去使用app可以避免不必要的困擾
OnPause跟OnDestory有其職掌的部份,如果都建議使用者按Home去當做離開程式
這點已經違背Android原本設計,老實說我覺得不是很好.....

隨便舉個例子像skype這個app,按Home的話他會藏在後面一直連線

不過,如果是常常會被執行的東西,按Home把程式藏在後面,的確是可以享受到啟動速度比較快
Home不可能完全取代Back,因為這本來就是兩個不同的東西,但是用的好的確會對使用速度有幫助


misgod wrote:
嗯..我覺得你跟我說...(恕刪)


的確不是所有軟體都適合按Home退出,
需要User靠使用經驗自行判斷

像富邦e點通(Java)也不應該直接按Home退出,
除非是故意在收盤前常常要進入,
否則最好還是從該軟體的選單中選擇離開來退出回Java環境
所以該用Home,還是該用Back,還是要讓User自行判斷
在這裡無法為每一個軟體評論Home與Back的退出那個方式較好
我們能幫助User的,就是透過互相討論,讓User有更多的觀念
讓User決定自己最佳的使用方式

因為過去大家都不了解home鍵,
在安全的前提下,適當的利用Home鍵,對使用感受是有助的(且直觀)
尤其是在比較慢的機器上(Dream, Magic, Hero)
如果以Hero內建的軟體來看,按Home都是沒問題的
且也可符合我這篇文章的訴求,讓Hero這個慢機器,用起來能感受好一點
其他軟體就要看使用者自己的判斷了

謝謝您的指教哦



test
到了這一步後

15. 重新開機完畢之後,在剛才的步驟13的DOS視窗下,輸入
adb shell,並輸入「su」後按下「Enter」,驗證是否可以執行root權限。

出現

error: device not found

怎解?


之前在這一步時
2. 測試手機是否正確安裝驅動程式。
執行「開始—執行>>cmd」按下「Enter」

就只出現

C:\Users\enjoy\Desktop\hero_root>adb devices
List of devices attached



--

沒事,搞定了:)
最近也試著用HOME鍵來結束程式,

不過不知道是不是玩太多出問題了 囧rz

現在不論在哪個程式,或是在HTC Sense下按HOME鍵,

一律會出現"選取...完成動作的畫面",

也就是說,不論有沒有打勾"以此為本操作預設值"的選項,

只要按下HOME鍵就會出現"HTC Sense"和"主畫面"兩個選項。

不知道是哪裡出了問題,麻煩有經驗的前輩指教了orz
你可能有安裝會使用home鍵的程式
建議您先檢查所有安裝的軟體,然後移除可疑的程式
test
推推推

感謝大大的研究和提議...
hero經過調較後一整個順暢...
擺脫了每次用完app都要task killer的枷鎖...
這才是multitasking 的智慧型手機啊...

THX!!
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 8)

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