安卓如何排查內存泄漏-九游会j9娱乐平台
⑴ 安卓anr和crash的區別
crash是程序崩潰的意思,anr是經態腔常遇到的crash報錯咐閉山,anr就是衡中內存溢出,比如圖片載入過大,線程開太多就會出現這個錯誤,可以這么理解,anr是crash的一種而已。
⑵ 不懂就問,為什麼所有安卓桌面dock欄都沒有
和前幾年ios能夠憑籍app數量將安卓壓倒在地、安卓嬌喘吁吁起身不能的情況不同,現在安卓的app數量對比ios平台可謂是有過之而無不及。2009年安卓系統起航伊始,google android market內app數量僅有可憐的1萬9千個,而現在play商店內app已經接近一百萬個,和蘋果app store相比毫不遜色甚至更多。 安卓app為數龐大,安卓已經靠第三方慢慢充實自身內涵 然而高產似乎沒有為安卓app帶來好的口碑,在人們印象中,安卓app的作風和華強北相仿,粗製濫造頗有天朝四百八十寨的雄姿,fc卡頓有如家常便飯。那麼為何安卓app的質量如此低居不上呢?下面就讓我們一起來看看。 精品安卓app的秘密:holo框架 安卓app數十萬計,當然其中也不乏精品,畢竟play商店還不至於淪落成垃圾場。play商店經常會在主頁放置google官方推薦的安卓app,這些精品app往往有一個共同點,那就是按照安卓holo設計規范編寫。 play商店推薦應用fancy,使用了holo框架 也許有的朋友對holo這個詞並不熟悉,的確這在國內很少被提及。holo是google在安卓4.0發布之時提出的安卓app交互及界面設計標 准,google希望籍此為眾多的安卓app開發者提供一個設計參考——在之前大家的參考對象都是ios應用的界面,甚至是塞班應用的界面。此 外,google也在holo中弱化了菜單鍵,這讓開發者很容易將ios上的應用遷移到安卓平台,畢竟ios沒有菜單鍵,為了吸引app移植安卓只能在這 方面向ios靠攏了。 google官方列舉的三種holo主題樣式 google為確立holo標准做了很多努力,親自上陣編寫了holo規范的條條框框,如規劃操作區域、操作手勢、功能模塊的布局邏輯甚至是所使用素材 的大小。由於有google深入參與,所以按照holo規范設計的app自然也享受到了很多標准化帶來的好處,比如說更容易對多種解析度進行適配,和原生 系統格調更一致,也更容易利用硬體機能,操作更流暢。 google事無巨細地制訂了holo框架,包括素材大小等 雖然不少人對holo的布局頗有微辭,如將按鈕放置在難以操作到的屏幕頂部等,但holo的美觀及高效卻得到了眾人的好評,左右滑動切頁很銷魂啊有木 有。而且,雖說holo規范裁定了app交互的大體邏輯和框架,但holo允許開發者在功能區放置自製控制項,這又為開發者們提供了天馬行空的餘地。 holo出現後,國外大量安卓app開發者紛紛跟進,新一代的安卓app變得前所未有的美觀簡潔高效。 holo:強大卻不強硬 holo是很好很強大,但holo卻有一個致命傷——它並非是一種強制性的標准。實際上google也沒法強制推行holo標准,讓新系統只兼容holo,畢竟大量基於舊版開發組件編寫的app擺在那,扔掉不是作死么。 holo很好,但沒法強推,因為不是所有的安卓設備都能像nexus那樣用到最新系統 由於holo並非是一個強制推行的框架,所以安卓app開發者們並不必須使用holo開發app。用holo開發app自然好處多多,然而這些好處不是 你想拿就能拿。就拿國內來說,大部分安卓機都是中低端機型,這些機器往往又沒啥機會使用新版安卓。在holo剛開始推行的時候,國內大部分機器還在使用 2.×甚至是1.×的系統,holo在這些機器上發揮不出優勢甚至出現各種奇怪的問題,fc啊卡頓啊排版錯亂什麼的猶如家常便飯。 直到現在,非holo主題的安卓2.3仍在佔有率最高的安卓版本 在此種情況下,國內的安卓app開發者只要想賺錢,都不太可能去跟進holo規范。用戶可不懂什麼技術不技術,釋出一個時靈時不靈的app,只會被用戶 罵成蜂窩煤。此外,國內軟體也一直有深度定製自己界面的傳統,君不見現在連windows桌面都能被國內軟體商定製得一張桌面百樣臉,安卓深度定製版更有 n個是出自國人之手。想要讓國內軟體商乖乖跟進一個和自己沒啥商業合作的google所制定的規范,只走尋常路,似乎有些不太符合國情。 目前,國內的app開發商更傾向於讓安卓app和ios app長成同一張臉,畢竟ios的設計風格更廣為人知,將不同平台的app統一成一種設計風格也有利於樹立自己的品牌形象。國內典型的在安卓平台上使用ios風格的軟體商有騰訊、新浪等等,特別是騰訊,無論是微信還是qq,安卓版和ios版除了系統頂欄外,基本長成一個樣。 去掉標題欄,你猜猜哪個是微信的ios版,哪個是安卓版? 隨著時代的發展,國內安卓機的系統也在慢慢更新,現在出爐的機器安卓版本最低也是4.0了。安卓4.×逐漸普及後,國產安卓app由於開發歷史悠久,慣 性使然,依然沒有跟進holo規范——推倒重做多心疼。因此,國內的安卓app很難享受到新系統帶來的好處,如gpu加速等,這讓很多人抱怨為啥都黃油計 劃了app還是這么卡。而大量高解析度安卓機的出現進一步讓這些使用舊版開放工具開發的安卓app的缺點暴露無遺,素材被拉伸變模糊,而按鈕的布局也變得 不適合在大屏幕上操作——想想長了5寸大屏的iphone吧,你一定點不到後退按鈕的。 ios應用的布局在4寸屏的iphone5中仍難以點到按鈕,何況在5寸屏安卓機 總的來說,安卓app質量不高很大一個原因就是沒有按照google的holo設計規范編寫,這在國內又尤為明顯。你問為啥國外的app會廣泛使用 holo規范?那是安卓機在安卓4.0發布前在國外並不怎麼好賣,安卓4.0和holo規范發布後安卓開始在市場一次次爆發小宇宙,國外軟體商才開始重 視,自然也會選擇用holo寫app了。再加之google在國外的影響力大得多,誰都知道自己的安卓app長得像ios的話,google是沒可能把它 擺在play商店的推薦位的——在南韓掛北韓國旗不是作死么。 大部分app仍使用java開發 “安卓基於java”、“安卓app使用java開發”這類的觀點見得很多,但實際上這種說法有失偏頗。google很早就發布了安卓ndk(native development kit,原生開發套件),開發者可在ndk中使用c語言編寫安卓app。 使用ndk開發安卓app,效率會大為提高 在ndk中使用c語言編寫安卓app的好處是顯而易見的,就是性能大為提高。性能提高有多高?三四層樓那麼高啦。在性能測試軟體cf-bench中,基 於ndk的性能是基於sdk(也就是使用java的開發套件)的三倍以上,十分驚人。可以說,只有使用ndk,才能最大程度發揮安卓機的性能。 ndk編寫的安卓app速度遠比sdk編寫的快 ndk好處多多,但到了開發者那裡就不怎麼受待見了。首先,和sdk相比,ndk能做的東西有限,程序員難以在ndk中用純c開發一款安卓app,到頭 來還是得用java去實現一些功能,這增添了安卓的開發難度。其次,使用ndk開發的安卓app兼容性往往不如在sdk中用java編寫的安卓app好, 畢竟sdk寫的app有davilk虛擬機支持,不需要直接和硬體對話。目前安卓硬體百花繚亂,arm廠商就十幾個,之上還有arm和x86兩大陣營,用 sdk的確是更明智的選擇。 移動市場分為arm和x86兩大硬體陣營,arm中又有n家製造商,比七國還亂 使用java開發安卓app固然方便,但也容易拉低安卓app質量。雖說安卓系統利用davilk虛擬機運行java,比非智能平台的jvm效率高得 多,但始終沒法和ndk相比,你怪安卓的app慢,這份怨念很大一部分得喂給java吃。java自帶內存回收機制,所以開發者使用java寫安卓app 時往往不注意控制內存泄漏(特別是一些小軟體),當其進程超過davilk虛擬機分配的閥值後,就會被系統殺掉釋放內存,這樣一來就有可能造成app的崩 潰、系統的假死等情況。 並不是說java不能編寫出精品app,但java的確容易造成問題 總的來說,安卓上並不是沒有高效的代碼,但碎片化的硬體讓開發者們很少考慮ndk,容易造成問題的java仍被廣泛使用。那麼什麼安卓app最常使用ndk開發呢?答案是大型游戲。反正紋理數據包都要針對硬體匹配,也不差在主程序省力氣了,更何況游戲對代碼效率要求很高。如果你看到同一個游戲的安卓版本比ios版卡頓,往往因為安卓機硬體太低——ios設備的圖形性能比安卓機高太多了。 管理不力的google,混亂的生態 歸根到底,程度都是人寫的。即使你的安卓app沒用holo框架,也沒用ndk,只要用心開發,仍舊能成為精品。然而安卓平台的風氣並不怎麼好,隱約有劣幣驅逐良幣之勢,混亂的生態和google管理不力有很大的關系。 google play市場是安卓最安全、最規范的市場,google play市場已經是安卓市場模範中的模範——相信這點沒人反對吧。然而就是這么一個正規的、大牌的、由google親自管理的市場,仍然充滿著濫用高權 限、植入惡性廣告、依靠刷榜上位的app。連官方市場都如此,你能指望第三方市場怎麼樣? 我寫文章的時候隨便一找就能找到這種app,名字誘惑,許可權充滿殺機 安卓平台上是不乏精品app,然而劣質app一人一口痰估計就能把那些用心開發的好app淹掉。你問我為啥大家都不開發精品app?好,下面我們一起來看看好app是如何滾蛋的。 如果你是一名個人開發者,那麼保守估計,開發一個精品安卓應用需要歷時三個月,然後app在play商店上架了,很快就廣為流傳。過了幾天你突然發現, 你的app已經被刷榜者刷下去了,錢都沒收到幾分。再回過頭一看,你的app已經被人從系統中提取出來,解包後重新封包,並被加入了大量惡性插件,並在 play市場外的各種渠道流傳。 在安卓app中加點料,不用啥力氣,來錢快得很 於是很多用戶安裝這個被加了料的app後,個人信息被盜取,作惡者靠販賣用戶信息發了一筆小財——各種騙子電話就搶著買個人信息呢。於是你就轉念想,原 來安卓上這樣來錢才快,然後就不再開發精品app,轉而去搞旁門左道去了——寫寫釣魚app刷刷榜只是舉手之勞,何必這么辛苦。 彷若你有良心,不幹偷雞摸狗的事情,但只憑心意是吃不飽飯的。心灰意冷之下,自然也就停止更新,轉投更靠譜的ios平台去了。只要你的app做得好,蘋果會好好對你的。你可以說蘋果抽水三成太多,但你不能說蘋果收了錢不幹事。 蘋果app store的健康生態是安卓無法企及的 實話說,如果不是背景深厚實力充足的公司,很難單靠安卓平台長久混下去;就算在安卓平台上賴著,多也只是雙修,錢還是從蘋果app store那裡得來。吃著地溝油喝著毒奶粉能幹贏天天吃牛肉的大漢么?安卓的生態和蘋果相比,也就是北京環境與西藏天空的區別了。