安卓如何排查内存泄漏
⑴ 安卓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那里得来。吃着地沟油喝着毒奶粉能干赢天天吃牛肉的大汉么?安卓的生态和苹果相比,也就是北京环境与西藏天空的区别了。