為什麼安卓系統的很多軟體都會亂自動啟動的?
而且沒法徹底關掉,每次都要打開應用管理,就看見很多軟體掛著佔資源。每次都要打開應用管理去才能把軟體強制關閉了,不然系統卡得要死。真的很麻煩,我的朋友都說了,用安卓的都是越來越卡。請問蘋果會這樣的嗎?
1. 安卓系統和電腦系統是一樣的,允許軟體把自己設成開機自動啟動,後台自動運行;良心好一點的,會把某些功能註冊成服務,自動運行,比整個自動啟動要少佔用一些內存。
2. 安卓依靠某些腳本來控制後台和前台程序所佔用的資源,官方ROM相對來說,控制得好一些;第三方ROM限制較少(或需用戶自己選擇策略),容易讓後台程序和服務佔用cpu和內存過多。3. 安卓對應用程序限制較少,很多程序,尤其是一些國內程序,會佔用較多資源,還死賴在後台不走。比如我就不明白,為嘛淘寶要在後台佔用一個進程、同時還開一項服務。 4. 蘋果不這樣,蘋果的後台程序是偽後台,大部分程序被放到後台時就變成殭屍,保留狀態,不再繼續運行,再次開啟時,仍是上次關閉時的狀態。程序和服務需要的通知功能,由統一的通知中心解決。蘋果這種策略的好處是後台程序佔用資源少,保證前台程序流暢運行。缺點是有些需要真後台的程序,比如QQ,就需要騰訊伺服器的額外支持才能保證後台狀態時正常接收消息。安卓的程序絕大多數根本不需要你手動去停止,這種設計是有道理的.實際上安卓的"後台程序"是並不佔用cpu,只保存了運行狀態的,因此當你調用它的時候,載入速度就會有很大的提升(能夠在後台佔用cpu運行的不是background,而是service).你反覆去殺進程,反而是賠了夫人又折兵,不僅沒有體會到這個設計的優點,還增大了系統殺進程的開銷,.而且還浪費了時間.
至於內存可用率低,也是因為這個原因.安卓系統有對進程的自動調用機制,在絕大多數情況下它遠遠比你手動去殺進程的效果好.只有當你玩遊戲的時候,因為觸發了好幾級的進程調用回收機制,才會導致系統變卡.當然事務都有兩面性,國內的很多app,在設計的時候就濫用service,不管你需不需要都胡亂給你掛服務,而且許可權也很高,比如百閱就有很多很可怕的許可權,比如對正在運行的進程重新排序,殺死後台進程,自動啟動等等,騰訊的很多軟體也都如此.你朋友說的,不殺進程就會卡,想必是這一類app裝得多了些.我的desirez,運存512M,主頻被我超到1.4G,從來不殺進程也很少關機,從來沒出現過所謂越用越卡的情況.所以,對樓主所說的問題,我提這樣幾個建議:1,安裝軟體的時候注意它的許可權,明顯不正常的不用(比如百閱一個閱讀軟體,你憑什麼擁有重新排序之類的許可權!?還有一些微博客戶端,飛聊微信手機qq之流也是如此,所以一定不要囫圇吞棗全裝上,只裝幾個真正用得到的),有舍才有得啊.2,試著改變思路,不要用什麼自動殺進程的軟體,也不要覺得安卓吃內存.合理的利用才有效率的最大化.手機之前換電池,否則已經兩周沒關機了,現在正在用這部手機打字,系統運行流暢,不比朋友未越獄的iphone4差.android平台開發了很多事件通知機制,比如屏幕開,屏幕關,GPS開,數據通訊開關之類,很多很多,然後不良軟體作者為了實現程序常駐,就把自己的程序啟動註冊到了這些事件中,所以,就變成只要你稍微動動手機,很多程序就在後台自動啟動了。
啰嗦了半天不知道說清楚沒,市場里有個自啟動程序管理器,可以詳細的看到哪些事件被哪些倒霉程序註冊了。哈哈,我來簡單說說,說的不對請指教。
為什麼會卡?那肯定是有後台程序使用了CPU。Android跟電腦類似,我們一般看到的是前台,還有一個東西叫後台,它是看不到的,它在後面默默的做著一些工作,比如數據獲取數據處理什麼,一般通過啟動線程來做到,可以理解它是在背後默默工作的人。除了線程,Android中還有一個叫服務的東西,它也是運行在後台的,這個東西跟線程有什麼區別啊?一般來說線程跟應用是同生命周期的,簡單來說就是,我把應用關了線程也關了,服務可以不是這樣的,它可以做到只要你手機沒關我就一直存在著。像一些有消息提醒的應用,哪怕在管理器關了它它還能彈出消息出來,你就想,卧槽這麼流氓?有些應用更流氓,就啟動兩個服務互相監看,那個掛了我就再啟動它,所以怎麼都關不掉。你或許說,卧槽這麼坑,那要這個服務幹嘛啊。其實它存在也不是沒用的。像我們聽歌,如果不是通過服務後台運行而是通過線程後台運行,好了,我退出到home去做其他事情,做著做著發現音樂掛了聽不了了。這是為什麼啊?其實你或許聽過Android是用Java開發,有個東西叫垃圾回收,簡單來說就是,我當前在用一個應用,忽然發現內存不夠了,系統做法是把現在不在用的應用的內存過來用,類似於把那不在用的應用關了。所以你發現有時退出應用去做其他事情,然後過一段時間再進來,你會發現你得重新載入數據什麼的,相當於重新打開這個應用。那通過服務就不一樣了,只要你不關手機,我做我的事情,我一直放著歌,播放器你掛不掛我不管。
Android裡面有很多系統服務,它是開機就回會運行的。像鬧鐘,電話,簡訊等等這些一個手機必須的功能,就是這些服務默默的為你工作著。好啦,除了這些必須的服務,還有一些其他的服務,它也會開機運行,它是一些應用的服務,它也能開機了就運行。你會問,它是怎麼來的啊?應用自帶的,你安裝它,它帶有這些服務,如果你裝了這些帶開機啟動的服務多了,哈哈,那你手機怎麼會不卡。
你說,納尼,那怎麼辦?
Android有個東西叫許可權就是說使用一些功能需要你允許才可以獲取得到,對於不放心的就不允許它後台運行吧。因為你用的是國產軟體
因為天朝用不了Google的GCM推送機制,而且國內的Android手機都去掉了Google服務,所以國產APP只能自己掛後台推送消息。
樓主的問題其實還是開發者的規範問題,這個問題似乎沒有什麼可用的好辦法,google以想規範,但是又不能太蘋果,所以這是個博弈的過程,建議你自己多注意後台的service吧,如果不用就強行停止,但是backgroud和service是不同概念,這個以上幾位朋友都說的很清楚了,我就不再重複了,不過我要說的是規範開發者的行為是哥雙方的,第一是谷歌要出力,第二,使用者也要抵制那些惡意程序。但是這個在國內太難,哎,老實說,我始終認為Galaxy nexus完勝iphone4s
這個問題實際上是有解的,只不過大多數飽受摧殘的國人不知道解決方案而已。
作為開發者,先說解決方案:安裝綠色守護。
效果:幾乎可以杜絕95%的後台偷偷運行。
原因分析:首先要明白,安卓軟體你能看到的界面是activity,你看不到的是service,這是可以後台運行的服務,是造成安卓手機耗電快,卡頓的重要原因之一。因為servive可以通過廣播喚醒,或其他應用之間的相互喚醒,所以你清理內存幾乎是沒有作用的。你只需要安裝綠色守護即可。
結果:要解決這個問題,最根本的做法還是要由谷歌指定一套可行的規則來制約開發者(目測谷歌應該注意到了這個問題並已經著手解決)。安裝一個LBE安全大師就好了,自啟,各種許可權,這就是安卓,所以要麼自己想辦法,要麼用蘋果。我覺得安卓還是可以的,以前老想著root刪軟體,後來下個lbe就好了。
這種方式是谷歌首創的
這就是為什麼我拋棄了用了5年的安卓陣營,重新投入蘋果懷抱的原因!
按我的使用沒有不卡的,自啟越多手機就越卡,殺程序會好點的。
我在想,開發者能否開發一個類似的插件,將這中現象給硬屏避,或者有一個類似的商店,能保證他們的APP都OK
還是得靠開發者自覺啊
推薦閱讀:
※如何評價魅族在MWC上展示的快充技術?
※學好演算法對一個程序員來說是必須的嗎?如果是,至少應該學到哪種程度?
※android開發是否被h5代替?
※Android Design 與 iOS 人機界面設計的區別是什麼?
※打開google play閃退,並且顯示「Google Play 商店 已停止」,怎麼辦?
TAG:Android |