❶ 为什么手机安卓系统优化不好
第一系统的架构层次决定的,
第二安卓是开源的,
第三安卓开源后优化厂家的能力参差不齐。
第一个问题,架构层次从下到上依次是
第一层:
Linux操作系统和驱动(Linux kernel):由C语言实现
第二层:本地框架和java运行环境(LIBRARIES 和android RUNTIME)
第三层:Android应用框架(ANDROIDFRAMEWORK)
第四层:Android应用程序(APPLICATIONS) 。
第二个问题。安卓开源,好处就是可以快速普及,拉拢大部分厂家。坏处就是碎片化严重。
第三个问题。一个版本出来后,大部分厂家都只是在第四层修改,少部分能够在第三层修改,极少部分能够在第一层修改。
最后重要的一点就是安卓的内存回收机制不一样。安卓是每个程序都可以用一点。如果不够用了,停止最先的程序,空出的内存给最新的用。ios的就是退出程序立马回收内存。
❷ 在Android开发中,有哪些好的内存优化方式
可以考虑使用ArrayMap/SparseArray而不是HashMap等传统数据结构。通常的HashMap的实现方式更加消耗内存,因为它需要一个额外的实例对象来记录Mapping操作。另外,SparseArray更加高效,在于他们避免了对key与value的自动装箱(autoboxing),并且避免了装箱后的解箱。
2. 避免在Android里面使用Enum
Android官方培训课程提到过“Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.”,具体原理请参考《Android性能优化典范(三)》,所以请避免在Android里面使用到枚举。
3. 减小Bitmap对象的内存占用
Bitmap是一个极容易消耗内存的大胖子,减小创建出来的Bitmap的内存占用可谓是重中之重,,通常来说有以下2个措施:
inSampleSize:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。
decode format:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异
4.Bitmap对象的复用
缩小Bitmap的同时,也需要提高BitMap对象的复用率,避免频繁创建BitMap对象,复用的方法有以下2个措施
LRUCache : “最近最少使用算法”在Android中有极其普遍的应用。ListView与GridView等显示大量图片的控件里,就是使用LRU的机制来缓存处理好的Bitmap,把近期最少使用的数据从缓存中移除,保留使用最频繁的数据,
inBitMap高级特性:利用inBitmap的高级特性提高Android系统在Bitmap分配与释放执行效率。使用inBitmap属性可以告知Bitmap解码器去尝试使用已经存在的内存区域,新解码的Bitmap会尝试去使用之前那张Bitmap在Heap中所占据的pixel data内存区域,而不是去问内存重新申请一块区域来存放Bitmap。利用这种特性,即使是上千张的图片,也只会仅仅只需要占用屏幕所能够显示的图片数量的内存大小
4. 使用更小的图片
在涉及给到资源图片时,我们需要特别留意这张图片是否存在可以压缩的空间,是否可以使用更小的图片。尽量使用更小的图片不仅可以减少内存的使用,还能避免出现大量的InflationException。假设有一张很大的图片被XML文件直接引用,很有可能在初始化视图时会因为内存不足而发生InflationException,这个问题的根本原因其实是发生了OOM。
5.StringBuilder
在有些时候,代码中会需要使用到大量的字符串拼接的操作,这种时候有必要考虑使用StringBuilder来替代频繁的“+”。
6.避免在onDraw方法里面执行对象的创建
类似onDraw等频繁调用的方法,一定需要注意避免在这里做创建对象的操作,因为他会迅速增加内存的使用,而且很容易引起频繁的gc,甚至是内存抖动。
7. 避免对象的内存泄露
类的静态变量持有大数据对象
静态变量长期维持到大数据对象的引用,阻止垃圾回收。
非静态内部类存在静态实例
非静态内部类会维持一个到外部类实例的引用,如果非静态内部类的实例是静态的,就会间接长期维持着外部类的引用,阻止被回收掉。
资源对象未关闭
资源性对象比如(Cursor,File文件等)往往都用了一些缓冲,我们在不使用的时候,应该及时关闭它们, 以便它们的缓冲及时回收内存。它们的缓冲不仅存在于java虚拟机内,还存在于java虚拟机外。 如果我们仅仅是把它的引用设置为null,而不关闭它们,往往会造成内存泄露。
解决办法: 比如SQLiteCursor(在析构函数finalize(),如果我们没有关闭它,它自己会调close()关闭), 如果我们没有关闭它,系统在回收它时也会关闭它,但是这样的效率太低了。 因此对于资源性对象在不使用的时候,应该调用它的close()函数,将其关闭掉,然后才置为null. 在我们的程序退出时一定要确保我们的资源性对象已经关闭。 程序中经常会进行查询数据库的操作,但是经常会有使用完毕Cursor后没有关闭的情况。如果我们的查询结果集比较小, 对内存的消耗不容易被发现,只有在常时间大量操作的情况下才会复现内存问题,这样就会给以后的测试和问题排查带来困难和风险,记得try catch后,在finally方法中关闭连接
Handler内存泄漏
Handler作为内部类存在于Activity中,但是Handler生命周期与Activity生命周期往往并不是相同的,比如当Handler对象有Message在排队,则无法释放,进而导致本该释放的Acitivity也没有办法进行回收。
❸ 目前来说 Android 有哪些值得研究的领域或者方向
性能优化,动画相关,软件架构完善,第三方控件开发,内存优化,用户体验。这里面的每个方向都够研究很长时间的,还有如果觉得Android已经研究的够透彻,可以研究下其他领域,比如IOS,跨平台,嵌入式都是目前比较火的。
❹ 现如今安卓手机的系统优化哪家好呢为什么呢
由于手机行业的迅速发展,各大手机厂商对自己手机系统的优化也是越来越好,那么在如今琳琅满目的安卓市场,哪些手机厂商对手机系统的优化最好呢?
1、华为手机系统
作为我国手机的龙头企业,华为手机可以说是在国内外都取得了非常好的口碑,特别是华为手机的操作系统,近期华为鸿蒙系统的发布可以说为华为的手机操作系统又上了一个台阶,在之前安卓系统的版本上又进一步优化,带给了用户更好的体验,华为在安卓手机的系统优化方面可以说是天花板的存在。
每家厂商都有自己优化的侧重点,当然每家厂商也都有自己的特色,希望各大手机厂商在手机系统的优化上再多多下点功夫,能给我们安卓用户带来更多更好的体验。
❺ 现如今安卓手机的系统优化哪家好呢你怎么看
安卓手机有很多,这里所谓的安卓手机是指系统以谷歌公司的安卓系统为基础进行自己优化的国产手机厂商生产的手机,因为在华为没有正式推出自己的鸿蒙系统之前。国产的所有手机上,然后所使用的都是基于安卓系统进行的改良,所以哪个系统更好用,就看哪个厂商自己做的优化更加稳定一点。
之前魅族所做的系统也是还比较新颖的,在初代的魅族系统里面,自己认为是国产的所有手机厂商里面做的系统优化能排到前3的,甚至说第二也没问题,因为要说第一肯定会有争议,但后来厂商本身的手机销量每日下降,在系统优化这方面就没有下太大的功夫。导致现在的魅族的系统只能说中规中矩,挑不出来太大的毛病,但也不是那么突出了。
❻ 安卓优化大师怎么样好不好用
首先,从用户量来说,安卓优化大师拥有庞大的基础用户量,用户的肯定显然能从侧面证明一下该款软件的实力。而实际上,安卓优化大师作为一款手机系统优化软件,在这方面的功能也确实非常强大。手机体检、程序管理、开机加速、安装卸载、进程管理、垃圾清理、文件管理、节电管理、快捷设置九大功能模块,基本上包括了手机优化的多个方面,让您在优化手机系统的时候更加全面,有效。
❼ 安卓APP性能优化都涉及哪些方面
以下优化都是在获取到Root后进行的。 Build.prop (编辑/system/build.prop 文件(需要root, 可以用文件管理器或者其他root explorer),re管理器如果build.prop里面有这些参数,只需要把数值更改。 1. 强制把Home程序驻入内存 ro.HOME_APP_ADJ=1 2.提高 JPG 质量为 100% ro.media.enc.jpeg.quality=100 3. VM 虚拟堆大小; 提高 RAM dalvik.vm.heap=48m 4. 使用 GPU 渲染UI debug.sf.hw=1 5. 减少拨号后出现的延时 ro.telephony.call_ring.delay=0 6.提高滑动响应 windowsmgr.max_events_per_sec=150 7.电池优化 wifi.supplicant_scan_interval=180 pm.sleep_mode=1 ro.ril.disable.power.collapse=0 8. 禁止调试通知图标出现在状态栏处 persist.adb.notify=0 9. 提高全局触摸屏响应 debug.performance.tuning=1 video.accelerate.hw=1 10. 提高图片和摄像质量 ro.media.dec.jpeg.memcap=8000000 ro.media.enc.hprof.vid.bps=8000000 11. (3G) 信号优化 ro.ril.hsxpa=2 ro.ril.gprsclass=10 ro.ril.hep=1 ro.ril.enable.dtm=1 ro.ril.hsdpa.category=10 ro.ril.enable.a53=1 ro.ril.enable.3g.prefix=1 ro.ril.htcmaskw1.bitmask=4294967295 ro.ril.htcmaskw1=14449 ro.ril.hsupa.category=5 12. 网络速度优化 net.tcp.buffer.default=4096,87380,256960,4096,16384,256960 net.tcp.buffer.wifi=4096,87380,256960,4096,16384,256960 net.tcp.buffer.umts=4096,87380,256960,4096,16384,256960 net.tcp.buffer.gprs=4096,87380,256960,4096,16384,256960 net.tcp.buffer.edge=4096,87380,256960,4096,16384,256960 13. 禁止拨号后出现黑屏 ro.lge.proximity.delay=25 mot.proximity.delay=25 14.修复应用程序出现问题 ro.kernel.android.checkjni=0 15.不通过按加/减音键唤醒手机 ro.config.hwfeature_wakeupkey=0 16.屏幕点亮时强制开启功能键背光 ro.mot.buttonlight.timeout=0 17.不显示开机动画(system/media/bootanimation.zip动画将不显示,加速开机速度) debug.sf.nobootanimation=1 18.其他优化 ro.config.hw_menu_unlockscreen=false persist.sys.use_dithering=0 persist.sys.purgeable_assets=1 dalvik.vm.dexopt-flags=m=y ro.mot.eri.losalert.delay=1000
❽ 针对Android的性能优化集中哪些方面
一、概要:
本文主要以Android的渲染机制、UI优化、多线程的处理、缓存处理、电量优化以及代码规范等几方面来简述Android的性能优化
二、渲染机制的优化:
大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。
Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染, 如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。
*关于JobScheler的更多知识可以参考http://hukai.me/android-training-course-in-chinese/background-jobs/scheling/index.html
七、代码规范
1)for loop中不要声明临时变量,不到万不得已不要在里面写try catch。
2)明白垃圾回收机制,避免频繁GC,内存泄漏,OOM(有机会专门说)
3)合理使用数据类型,StringBuilder代替String,少用枚举enum,少用父类声明(List,Map)
4)如果你有频繁的new线程,那最好通过线程池去execute它们,减少线程创建开销。
5)你要知道单例的好处,并正确的使用它。
6)多用常量,少用显式的"action_key",并维护一个常量类,别重复声明这些常量。
7)如果可以,至少要弄懂设计模式中的策略模式,组合模式,装饰模式,工厂模式,观察者模式,这些能帮助你合理的解耦,即使需求频繁变更,你也不用害怕牵一发而动全身。需求变更不可怕,可怕的是没有在写代码之前做合理的设计。
8)View中设置缓存属性.setDrawingCache为true.
9)cursor的使用。不过要注意管理好cursor,不要每次打开关闭cursor.因为打开关闭Cursor非常耗时。Cursor.require用于刷cursor.
10)采用SurfaceView在子线程刷新UI,避免手势的处理和绘制在同一UI线程(普通View都这样做)
11)采用JNI,将耗时间的处理放到c/c++层来处理
12)有些能用文件操作的,尽量采用文件操作,文件操作的速度比数据库的操作要快10倍左右
13)懒加载和缓存机制。访问网络的耗时操作启动一个新线程来做,而不要再UI线程来做
14)如果方法用不到成员变量,可以把方法申明为static,性能会提高到15%到20%
15)避免使用getter/setter存取field,可以把field申明为public,直接访问
16)私有内部类要访问外部类的field或方法时,其成员变量不要用private,因为在编译时会生成setter/getter,影响性能。可以把外部类的field或方法声明为包访问权限
17)合理利用浮点数,浮点数比整型慢两倍
18)针对ListView的性能优化,ListView的背景色与cacheColorHint设置相同颜色,可以提高滑动时的渲染性能。ListView中getView是性能是关键,这里要尽可能的优化。
getView方法中要重用view;getView方法中不能做复杂的逻辑计算,特别是数据库操作,否则会严重影响滑动时的性能
19)不用new关键词创建类的实例,用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。
clone()方法不会调用任何类构造函数。在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。例如,下面是Factory模式的一个典型实现:
20)public static Credit getNewCredit() {
return new Credit();
}
改进后的代码使用clone()方法,如下所示:
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}
上面的思路对于数组处理同样很有用。
21)乘法和除法
考虑下面的代码:
for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }
用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代码:
for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }
22)ViewPager同时缓存page数最好为最小值3,如果过多,那么第一次显示时,ViewPager所初始化的pager就会很多,这样pager累积渲染耗时就会增多,看起来就卡。
23)每个pager应该只在显示时才加载网络或数据库(UserVisibleHint=true),最好不要预加载数据,以免造成浪费
24)提高下载速度:要控制好同时下载的最大任务数,同时给InputStream再包一层缓冲流会更快(如BufferedInputStream)
25)提供加载速度:让服务端提供不同分辨率的图片才是最好的解决方案。还有合理使用内存缓存,使用开源的框架
引用:Android性能优化的浅谈
❾ 安卓手机性能差怎么办 优化方法都有哪些
安卓手机优化可以借助一些优化软件来对手机进行优化,可以通过腾讯手机管家上面的手机优化功能来对手机进行优化,进入主页面,点击一键优化,就可以关闭后台运行程序,清理手机内存,和检测开机自启软件等,优化手机的额性能。
❿ 如何对Android进行性能优化
不知道你是说对系统优化还是什么app优化,
系统优化就只能找底层人员的了,我也不是很了解。
app优化的话,大体有以下几个方面
ui优化,去除累赘的布局,优化初始化的速度,提高apk流畅性。
网络交互优化,好的网络和数据处理方式决定了app的体验性能。
检查内存是否有泄漏,人们常说的anr详细。
如何你问的是android手机优化。
平常人只能下载手机管家这种软件进行清除内存,垃圾,卸载无用的apk,保持android系统的流畅性。