android後台進程的問題,大家各抒己見

來源:互聯網
上載者:User

原文地址:http://www.eoeandroid.com/thread-156394-1-1.html

下午從網上看到2篇文章:
第一篇:雜談:後台進程對Android效能的影響
Android現在這麼火,各種的裝置也是琳琅滿目,高中低等,大小螢幕都有,但是它始終未能達到iOS那樣的令人稱讚的卓越體驗和效能,其操作的流暢度,效能和安全性方面總是略輸iOS一籌。據說iPhone4雖然是單核512M記憶體,但是比Android的雙核1G記憶體的操作起來更流暢,iPad2雖然是也只有512M的記憶體但是操作起來比Android四核1G記憶體還要流暢。另外在安全性方面也不如iOS。

造成Android效能,待機時間,操作流暢和安全性不好的原因是Android後台進程的管理。

Android的進程管理很差勁,這也是它效能差的原因,操作的流暢性,待機時間,效能都跟進程管理,特別是後台進程的管理有很大關係。開啟手機一看,有幾十條進程在跑,比如簡訊,郵件,IME等系統核心應用,另外還有很多很應用也都在後台運行,不管是否是使用者啟動的,很多應用都在後面跑,這點已經成為Android使用者最受困擾的地方。更為可氣的是很多進程用工作管理員,進程殺手等工具殺都殺不掉。

主要的原因就是Android中的關鍵的組件都有著過長的生命週期,比如BroadcastReceiver和Service,還有就是線程的不正當應用。Service就是專門用於在後台長期啟動並執行組件,用以在後台完成長期的任務比如在背景播放歌曲,在後台內送郵件和簡訊等等。BroadcastReceiver是一種長期存在的組件,它正常時候是處於不活躍的,只有當其感興趣的Intent廣播出現時就被啟用,雖然它不活躍,但是它依然活著,它所在的進程依然運行。此外,Activity也可以長期的運行,通過moveTaskToBack()就可以不銷毀的把Activity放到後台去,或者在Activity中運行Thread,如果在Activity銷毀時沒把Thread停止,那麼Thread就會仍然運行,進程就會仍然運行。

這是Android系統架構決定的,對於有組件在啟動並執行進程,即使用工作管理員把它殺掉,那麼ActivityManager還會把這個進程重啟。所以對於Android的程式來講,需要開發人員的努力才能正確的應用這些組件讓應用在使用者用到的時候運行,不需要的時候就完全退出。

但是造成現在大多數的應用都在後台偷偷的跑的原因還主要是Android開發人員的原因。

眾所周知,Android開發人員盈利並不是很好,所以開發人員就不願意在最佳化效能方面做太多的精力投入,因為它無法得到回報。

另外就是,因為無法盈利,所以就讓程式在後台跑,收集收集一些使用者的使用習慣和一些資料等,以便作為後續開發的參考資料。

iOS的裝置就沒有這樣的情況,它對於後台進程的控制相當的嚴格,程式退出了,就是退出了,另外在它的近期應用條中(雙擊Home鍵,或四指觸摸向上拉),長按應用後,點擊左上方的頭號,即可關閉應用,而且關閉了應用不會再次啟動,除非使用者啟動它。這裡不管應用是否真正退出了,至少從使用者角度來看是退出了。

第二篇:技術貼,Android背景程式是否需要一直手工關閉?
鑒於論壇上有很多為了留出更大的記憶體空間而老是自動殺進程的tx,還有很多說背景程式太多會耗電的tx,這裡有兩篇文章分享給大家。

第一篇:[知識] 合理使用記憶體,正確認識工作管理員 Android記憶體原理不用在意剩餘記憶體的大小.其實很多人都是把使用其他系統的習慣帶過來來了.安卓Android大多應用沒有退出的設計其實是有道理的,這和系統對進程的調度機制有關係.如果你知道java,就能更清楚這機制了.其實和java的記憶體回收機制類似,系統有一個規則來回收記憶體.進行記憶體調度有個閥值,只有低於這個值系統才會按一個列表來關閉使用者不需要的東西.當然這個值預設設定得很小,所以你會看到記憶體老在很少的數值徘徊.但事實上他並不影響速度.相反加快了下次啟動應用的速度.這本來就是安卓Android標榜的優勢之一,如果人為去關閉進程,沒有太大必要.特別是自動關進程的軟體.到這裡有人會說了,那為什麼記憶體少的時候運行大型程式會慢呢?其實很簡單,在記憶體剩餘不多時開啟大型程式,會觸發系統自身的調進程調度策略,這是十分消耗系統資源的操作,特別是在一個程式頻繁向系統申請記憶體的時候.這種情況下系統並不會關閉所有開啟的進程,而是選擇性關閉,頻繁的調度自然會拖慢系統.所以,論壇上有個更改記憶體閥值的程式可以有一定改善.
但改動也可能帶來一些問題,取決於值的設定.那麼,進程管理軟體有無必要呢?有的.就是在運行大型程式之前,你可以手動關閉一些進程釋放記憶體,可以顯著的提高運行速度.但一些小程式,完全可交由系統自己管理.談到這裡,可能有的朋友會問,如果不關程式是不是會更耗電.我就說說 安卓Android背景原理,你就明白了.安卓Android的應用在被切換到後台時,它其實已經被暫停了,並不會消耗cpu資源,只保留了運行狀態.所以為什麼有的程式切出去重進會到主介面.但是,一個程式如果想要在幕後處理些東西,如音樂播放,它就會開啟一個服務.服務可在後台持續運行,所以在後台耗電的也只有帶服務的應用了.這個在進程管理軟體裡能看到,標籤是service.至於廣播什麼的我就不涉及了.所以沒有帶服務的應用在後台是完全不耗電的,沒有必要關閉.這種設計本來就是一個非常好的設計,下次啟動程式時,會更快,因為不需要讀取介面資源,何必要關掉他們抹殺這個安卓Android的優點呢?還有一個.為什麼安卓Android一個應用看起來那麼耗記憶體.大家知道,安卓Android上的應用是java,當然需要虛擬機器,而安卓Android上的應用是帶有獨立虛擬機器的,也就是每開一個應用就會開啟一個獨立的虛擬機器.這樣設計的原因是可以避免虛擬機器崩潰導致整個系統崩潰,但代價就是需要更多記憶體.以上這些設計確保了安卓Android的穩定性,正常情況下最多單個程式崩潰,但整個系統不會崩潰,也永遠沒有記憶體不足的提示出現.大家可能是被windows毒害得太深了,總想保留更多的記憶體,但實際上這並不一定會提升速度,相反卻喪失了程式啟動快的這一系統特色,很沒必要.大家不妨按我說的習慣來用用這個系統.最後推薦一款進程管理軟體,systempanel,market上能搜到,介面友好啟動快,功能也不錯,用於手動關閉進程很好的軟體.
祝大家玩機愉快,這系統開十天半個月都沒問題,不是windows.至於為什麼開了大程式或者開了好幾個程式之後切換會變慢,我的理解如下:1.大程式A已經開啟,佔用70%記憶體,如果再想運行一個B,需要50%的記憶體,則就需要一個將A從記憶體中釋放或者壓縮的過程,所以表現出來的就是慢一會兒2.ABCDE共佔用記憶體80%,運行新程式Z需要 20%的記憶體,系統記憶體因為沒見過剩餘0的時候,也就是應該剩一部分空閑記憶體,那麼就需要從A~E這幾個程式中選擇一個或者幾個來關閉,這一過程也需要耗費系統資源,所以會慢一會兒3.也就是說你手動去殺程式的時候,就是替系統在釋放記憶體,就算你不殺,在需要記憶體的時候系統也會自動釋放.4.不在後台啟動並執行程式(沒服務的),即使不殺也不會耗電.在後台啟動並執行(有服務的)程式,如後台放歌,當然會耗電.5.不是說殺進程沒用,不然作者就不會推薦進程管理軟體了.哪個帶服務耗電哪個後台一直在運行,看服務就能看出來,這樣的該殺.6,以qq舉例,正常的退,會在進程管理裡留下qq的運行狀態,但不耗電不佔
cpu,如果你只是切換出去(按小房子而不是退出)那麼自然會耗電,因為程式還在運行.(qq後台一樣後台 就是qq正常退出的時候 和別的軟體一樣 不完全退出 會在記憶體裡留著  但是不佔cpu 不費電 再次啟動就會非常快了 這就是為什麼android能超越 WM6的系統的原因)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.