为什么安卓不能优化
① 安卓发展至今真的还不如ios流畅吗你怎么看
安卓前几年的流畅度的确不能跟ios比,但是经过这几年安卓持续的优化,在流畅度方面已经取得了很大的进步了。但是我觉得无论安卓再怎么优化,特别是动画过渡方面依然比不过ios。根本原因是安卓和IOS系统的根本原因,即安卓会在点击时先判断然后执行动画,而IOS会先执行动画,无论你点击什么。
苹果跟安卓的芯片性能差距太大。
首先,这与手机的处理器和配置密切相关。处理器相当于手机的大脑。有了一个好的手机处理器,手机上的用户体验将大大提高。现在在安卓手机市场上,满是100元和1000元的机器,而这些低成本的手机最有可能被卡住。它的处理器性能不够,内存不够。当然,我们不能携带数百元或1000元以上的手机,所以我们要求它们像6000或7000个苹果一样柔软。
② 为什么安卓系统的手机优化不流畅
安卓手机预安装软件多很多厂商生产的安卓手机内置了许多预安装软件,这就导致经常看到,刚买的手机上标示的手机内存很大,但是却已经使用了很大的一部分,能使用的实际内存是很小的。
③ 都说IOS系统优化的好,为什么安卓不能优化呢
没有说不能优化啊,像Cyanogenmod,MIUI,魅族的Flyme OS,等等都是基于安卓的优化而生成的衍生版。他们都不同程度上对安卓进行了优化,也就是为什么第三方ROM能够生存的原因,因为很多手机厂商在系统优化不给力,给了第三方ROM团队发展的条件。所谓有需求就有市场嘛。
至于iOS优化比安卓要好,这个通俗的讲就是天资的问题了,谷歌做系统要兼容市面上五花八门的硬件,苹果软硬件都是自己在搞,一定程度上决定了iOS要比安卓在底层优化要更优秀,因此即使安卓在经过优化后相比iOS有差距的原因。
还有个更重要的原因就是多任务,iOS一直到4才出现多任务,而且是伪多任务(现在还是),这和安卓在刚推出时就支持多任务(真正的多任务)是有差距的,任务多自然压力大,也就要牺牲特效了,那些种类繁多的桌面小插件就更不用说了。
全部一个一个字自己打的,看得懂不
④ 为什么安卓用一段时间就会卡,安卓和苹果的区别在哪里
Android手机并不能做到手机所能做到的所有事情。我现在要说的是。因为Android手机不能做手机能做的所有事情,所以这个应用程序并没有针对Android手机进行优化。例如,对于全屏应用程序来说,它不能正确呈现,或者当孩子长大后,它不能让你选择他的照片。对我来说,这不是“做应用程序需要你做的事情”的问题。iPhone是一个图标密集型移动操作系统,需要数百个应用程序才能正确呈现。它甚至还有一个“iPhone”图标。因此,当我们告诉某人如何“使用手机和播放音乐”时,他们不会理解这一点,因为Android手机就在其中。他们很难理解“iPhone”应用程序和“Android”应用程序的区别。有些人仍然感到困惑,但这仍然很容易理解。
让我们来看看移动操作系统、Android以及操作系统可以做的事情。谷歌搜索结果页面显示你的结果与“应用程序”,或应用程序将是最受欢迎的应用程序,而不是“其他”谷歌搜索。选择安卓就是因为这个原因。
有几次,在我看来,当人们问“你想要什么应用程序?”而“这个软件运行什么应用程序?”则排在谷歌搜索结果的首位时,我感到很沮丧。当你有疑问的时候,问它。你可能认为Android是为“运行在Android上的软件”而设计的,但是Android仅仅是为了制作使用iOS功能的简单用户信息应用。
种风格的问题在于两者之间有很大的区别。这款手机的Android设计与iPhone和Android手机有明显区别,iOS设计则没有。这款手机在所有这些方面都不那么清晰,也没有占用太多的数据空间,因此没有多少不同的应用程序可以在上面使用。这两种风格的问题在于,在一个普通的操作系统上,Android需要越来越复杂。你不能控制你所有的行为。在iOS上,只有当你打开一个呼叫按钮让手机上的用户采取行动时,用户界面才知道。在Android上,如果你打开两个或更多的电话来做某事,这同样适用。
⑤ Android App内存优化
内存优化就是对内存问题的一个预防和解决,做内存优化能让应用挂得少、活得好和活得久。
挂的少:
“挂”指的是 Crash,内存问题导致 Crash 的具体表现就是内存溢出异常 OOM。
活得好:
活得好指的是使用流畅,Android 中造成界面卡顿的原因有很多种,其中一种就是由内存问题引起的。内存问题之所以会影响到界面流畅度,是因为垃圾回收(GC,Garbage Collection),在 GC 时,所有线程都要停止,包括主线程,当 GC 和绘制界面的操作同时触发时,绘制的执行就会被搁置,导致掉帧,也就是界面卡顿。
活得久:
活得久指的是我们的应用在后台运行时不会被干掉。Android 会按照特定的机制清理进程,清理进程时优先会考虑清理后台进程。清理进程的机制就是LowMemoryKiller。在 Android 中不同的进程有着不同的优先级,当两个进程的优先级相同时,低杀会优先考虑干掉消耗内存更多的进程。也就是如果我们应用占用的内存比其他应用少,并且处于后台时,我们的应用能在后台活下来,这也是内存优化为我们应用带来竞争力的一个直接体现。
内存占用是否越少越好?
当系统 内存充足 的时候,我们可以多用 一些获得更好的性能。当系统 内存不足 的时候,我们希望可以做到 ”用时分配,及时释放“。内存优化并不能一刀切。
我们都知道,应用程序的内存分配和垃圾回收都是由Android虚拟机完成的,在Android 5.0以下,使用的是Dalvik虚拟机,5.0及以上,则使用的是ART虚拟机。
Android虚拟机Dalvik和ART
1、内存区域划分
详细请看以下两篇文章(建议全看):
java内存四大区_JVM内存区域划分
Android 内存机制
2、内存回收
垃圾收集的标记算法(找到垃圾):
垃圾收集算法(回收垃圾):
引用类型:强引用、软引用、弱引用、虚引用
对象的有效性=可达性+引用类型
JAVA垃圾回收机制-史上最容易理解看这一篇就够了
Android:玩转垃圾回收机制与分代回收策略
android中还存在低杀机制,这种情况属于系统整机内存不足,直接把应用进程杀掉的情况。
Android后台杀死系列:LowMemoryKiller原理
1、内存溢出
系统会给每个App分配内存空间也就是heap size值,当app占用的内存加上申请的内存超过这个系统分配的内存限额,最终导致OOM(OutOfMemory)使程序崩溃。
通过命令 getprop |grep dalvik.vm.heapsize 可以获取系统允许的最大
注意:在设置了heapgrowthlimit的状况下,单个进程可用最大内存为heapgrowthlimit值。在android开发中,若是要使用大堆,须要在manifest中指定android:largeHeap为true,这样dvm heap最大可达heapsize。
关于heapsize & heapgrowthlimit
2、内存泄漏
Android系统虚拟机的垃圾回收是通过虚拟机GC机制来实现的。GC会选择一些还存活的对象作为内存遍历的根节点GC Roots,通过对GC Roots的可达性来判断是否需要回收。内存泄漏就是 在当前应用周期内不再使用的对象被GC Roots引用,造成该对象无法被系统回收,以致该对象在堆中所占用的内存单元无法被释放而造成内存空间浪费,使实际可使用内存变小。简言之,就是 对象被持有导致无法释放或不能按照对象正常的生命周期进行释放。
Android常见内存泄漏汇总
3、内存抖动
指的是在短时间内大量的新对象被实例化,运行时可能无法承载这样的内存分配,在这种情况下就会导致垃圾回收事件被大量调用,影响到应用程序的UI和整体性能,最终可能导致卡顿和OOM。
常见情况:在一些被频繁调用的方法内不断地创建对象。例如在View 的onDraw方法内new 一些新的对象。
注意内存抖动也会导致 OOM,主要原因有如下两点:
1、Android Studio Profiler
作用
优点
内存抖动问题处理实战
理解内存抖动的概念的话,我们就能明白只要能找到抖动过程中所产生的对象及其调用栈,我们就能解决问题,刚好Android Studio 的Porfiler里面的Memory工具就能帮我们记录下我们操作过程中或静止界面所产生的新对象,并且能清晰看到这些对象的调用栈。
选择Profile 中 的Memory ,选择 Record Java/Kotlin allocations,再点击Record开始记录, Record Java/Kotlin allocations 选项会记录下新增的对象。
操作完成之后,点击如图所示的红脑按钮,停止记录。
停止记录后,我们就可以排序(点击 Allocations可以排序)看看哪些对象或基本类型在短时间被频繁创建多个,点击这些新增的对象就可以看到它的完成的调用链了,进而就找找到导致内存抖动的地方在哪里了。
2、利用DDMS 和 MAT(Memory Analyzer tool)来分析内存泄漏
我们利用工具进行内存泄漏分析主要是用对比法:
a.先打开正常界面,不做任何操作,先抓取一开始的堆文件。
b.一顿胡乱操作,回到原来操作前的界面。主动触发一两次GC,过10秒再抓取第二次堆文件。
c.通过工具对比,获取胡乱操作后新增的对象,然后分析这些新增的对象。
DDMS作用:抓取堆文件,主动触发GC。(其实也是可以用Android Studio 的Profile里面的Memory工具来抓取堆文件的,但是我这边在利用Profile 主动触发gc 的时候会导致程序奔溃,也不知道是不是手机的问题,所以没用Android Studio的Profiler)
MAT作用:对堆文件进行对比,找到多出的对象,找到对象的强引用调用链。
以下是详细的过程:
步骤1.打开DDMS,选择需要调试的应用,打开初始界面,点击下图的图标(Dump Hprof File)先获取一次堆文件。
步骤2.对应用随便操作后,回到一开始的界面,先多触发几次GC ,点击下图的图标(Cause Gc)来主动触发GC,然后再次点击 Dump Hprof File 图标来获取堆文件。
步骤3.通过Android Studio Profile 或者 DDMS mp 的堆文件无法在MAT 打开,需要借助android sdk包下的一个工具hprof-conv.exe来转换。
格式为 hprof-conv 旧文件路径名 要转换的名称;
例如:hprof-conv 2022-04-13_17-54-40_827.hprof change.hprof
步骤4.把两份堆文件导入MAT,然后选择其中第二次获取的堆文件,点击 如图所示的 Histogram查看。
步骤5.点击下图图标,Compare To Another Heap Dump ,选择另一份堆文件。
6.会得出下图所示的 Hitogram 展示,我们主要看Objects 这一列。 如下图所示 “+ 2” 则代表前面两份堆文件对比,这个对象多了两个,我们主要就是要分析这些多了出来,没有被回收的对象。
7.加入我们从增加的对象中,看到了MainActivity ,则需要从一开始打开的Hitogram 展示里面找到这个对象的调用栈。如下图所示,搜索MainActivity
8.看到下图所示解雇,然后鼠标右键点击下图红色圈圈着的MainActivity ,选择 Merger Shortest Paths to Gc Roots ,再选择 exclude all phantom/weak/soft etc.references ,就可以看到这个MainActivity 对象的强引用链,至此我们就可以找到MainActivity对象是被什么引用导致无法回收了。
3、内存泄露检测神器之LeakCanary(线下集成)
自行学习了解,接入简单,使用简单,基本可以解决大部分内存泄漏问题。
github地址 : https://github.com/square/leakcanary/
学习地址 : https://square.github.io/leakcanary/changelog/#version-22-2020-02-05
针对内存抖动的建议:
针对内存泄漏问题的建议:
针对内存溢出问题的建议(主要就是要减少内存占用):
建议参考:
深入探索 Android 内存优化(炼狱级别)
对于 优化的大方向,我们应该优先去做见效快的地方,主要有以下三部分:内存泄漏、内存抖动、Bitmap。完善监控机制也是我们的重点,能帮助我们对内存问题快速分析和处理。
参考:
深入探索 Android 内存优化(炼狱级别)
⑥ Android 13开始测试了,为啥安卓越优化越平庸
虽然相当一部分用户还在使用Android 9、Android 10,谷歌的Android 12L也没有正式发布,但“后浪”Android 13已经来了。2月11日,谷歌放出了Android 13的第一个开发者预览版,并把稳定版定档在4个月以后。
毫无疑问,Android 13的消息让一众安卓机友感到惊讶,大家的反应集中在“Android 12还没用上,13怎么来了”,并质疑谷歌又在“刷版本号了”。不过,如果了解谷歌以往的发布节奏的话不难发现,2月份发布开发者预览版其实属于常规操作。Android 11、Android 12的首个开发者预览版都是在2月份放出的。
不过,上述风评可能是安卓系统体验割裂的现象之一,似乎原生安卓在用户的感知中正在走向平庸和鸡肋。
Ps.国内一加9和一加9 Pro曾放出升级原生Android的官方教程。目前一加9系列优惠当中,老用户有限量版的一加T恤赠送,点击下方链接可以查看你的优惠额度>>
01 Android 13,没有升级的升级
相较上一代,Android 12带来了“Material You”功能,用户可以根据壁纸颜色深度调整系统外观,整体风格更加个性化和多样化,此外便是有关摄像头、麦克风等隐私项目的调整。Android 13在Android 12的基础上进一步加深了“Material You”和隐私这两方面内容。你也可以说,Android 13就是Android 12的一个补丁。
Android 13把隐私和安全作为升级的核心,推出了一个照片选择器和一个新的Wi-Fi权限。照片选择器限制了应用读取相册的行为,用户可以允许应用仅读取部分照片。而新Wi-Fi权限推出后,保证了那些仅需要连接Wi-Fi的设备,在建立链接后不必再暴露位置。
此外,“Material You”功能不再只面向谷歌的第一方应用,所有第三方应用现在都可以根据谷歌的要求进行适配。不过,适配仅支持应用图标,应用内界面无法改变。
02 为啥安卓用户升级慢
安卓连续两代的升级重点,在用户当中的感知都不高,与其说是用户慢了,不如说是谷歌慢了。
国内的厂商普遍都会根据安卓新版本作定制开发独立的UI系统。这两年就有让人眼前一亮的Origin OS,极具口碑的Color OS、Magic UI、Flyme,小米的MIUI虽然正在遭遇口碑滑铁卢,但也是小米公司的第一款产品,跟小米手机一样走过了10年的发展。
这些定制系统相比原版安卓都有鲜明的特点,也就是极其贴合用户的使用场景。小到 游戏 中接听电话,小窗回复信息,快捷打开 健康 宝;大到与电脑设备协同互联,作为家居管理的中枢和隐私管理。手机厂商显然比谷歌更懂得用户需要什么。
尤其是这两年,谷歌的升级更偏向于为开发者授权,提供API,方便第三方魔改。而对于手机厂商,手机系统的战略地位愈发凸显,成为串联硬件生态的软实力。谷歌更像是一个开源系统的维护者的角色,而手机厂商毫无疑问是真正的开发者。
03 谷歌加快补短板
谷歌似乎也意识到了类似的问题,Android 13的升级更注重应用的兼容性,比如让更多的Android系统功能可以通过Google Play更新,并针对平板电脑、可折叠设备和Chromebook进行优化。这些调整可以在安卓平台上带来更一致的使用体验。
另外,谷歌也在向苹果学习, CES 2022上,谷歌介绍了“Better Together”计划,旨在通过与厂商、开发者合作,给安卓用户带来类似苹果生态的体验,比如隔空传送、设备接力等等。而这些功能,手机厂商已经部分实现了。
如果你想要体验最新的Android 13,只需将官方的系统映像下载并刷入Pixel 6 Pro / 6 / 5a 5G / 5 / 4a (5G) / 4a / 4 XL / 4设备。或者使用Android模拟器的平板电脑或可折叠设备配置。