android系统优化
㈠ Android性能优化总结
常用的Android性能优化方法:
一、布局优化:
1)尽量减少布局文件的层级。
层级少了,绘制的工作量也就少了,性能自然提高。
2)布局重用 <include标签>
3)按需加载:使用ViewStub,它继承自View,一种轻量级控件,本身不参与任何的布局和绘制过程。他的layout参数里添加一个替换的布局文件,当它通过setVisibility或者inflate方法加载后,它就会被内部布局替换掉。
二、绘制优化:
基于onDraw会被调用多次,该方法内要避免两类操作:
1)创建新的局部对象,导致大量垃圾对象的产生,从而导致频繁的gc,降低程序的执行效率。
2)不要做耗时操作,抢CPU时间片,造成绘制很卡不流畅。
三、内存泄漏优化:
1)静态变量导致内存泄漏 比较明显
2)单例模式导致的内存泄漏 单例无法被垃圾回收,它持有的任何对象的引用都会导致该对象不会被gc。
3)属性动画导致内存泄漏 无限循环动画,在activity中播放,但是onDestroy时没有停止的话,动画会一直播放下去,view被动画持有,activity又被view持有,导致activity无法被回收。
四、响应速度优化:
1)避免在主线程做耗时操作 包括四大组件,因为四大组件都是运行在主线程的。
2)把一些创建大量对象等的初始化工作放在页面回到前台之后,而不应该放到创建的时候。
五、ListView的优化:
1)使用convertView,走listView子View回收的一套:RecycleBin 机制
主要是维护了两个数组,一个是mActiveViews,当前可见的view,一个是mScrapViews,当前不可见的view。当触摸ListView并向上滑动时,ListView上部的一些OnScreen的View位置上移,并移除了ListView的屏幕范围,此时这些OnScreen的View就变得不可见了,不可见的View叫做OffScreen的View,即这些View已经不在屏幕可见范围内了,也可以叫做ScrapView,Scrap表示废弃的意思,ScrapView的意思是这些OffScreen的View不再处于可以交互的Active状态了。ListView会把那些ScrapView(即OffScreen的View)删除,这样就不用绘制这些本来就不可见的View了,同时,ListView会把这些删除的ScrapView放入到RecycleBin中存起来,就像把暂时无用的资源放到回收站一样。
当ListView的底部需要显示新的View的时候,会从RecycleBin中取出一个ScrapView,将其作为convertView参数传递给Adapter的getView方法,从而达到View复用的目的,这样就不必在Adapter的getView方法中执行LayoutInflater.inflate()方法了。
RecycleBin中有两个重要的View数组,分别是mActiveViews和mScrapViews。这两个数组中所存储的View都是用来复用的,只不过mActiveViews中存储的是OnScreen的View,这些View很有可能被直接复用;而mScrapViews中存储的是OffScreen的View,这些View主要是用来间接复用的。
2)使用ViewHolder避免重复地findViewById
3)快速滑动不适合做大量异步任务,结合滑动监听,等滑动结束之后加载当前显示在屏幕范围的内容。
4)getView中避免做耗时操作,主要针对图片:ImageLoader来处理(原理:三级缓存)
5)对于一个列表,如果刷新数据只是某一个item的数据,可以使用局部刷新,在列表数据量比较大的情况下,节省不少性能开销。
六、Bitmap优化:
1)减少内存开支:图片过大,超过控件需要的大小的情况下,不要直接加载原图,而是对图片进行尺寸压缩,方式是BitmapFactroy.Options 采样,inSampleSize 转成需要的尺寸的图片。
2)减少流量开销:对图片进行质量压缩,再上传服务器。图片有三种存在形式:硬盘上时是file,网络传输时是stream,内存中是stream或bitmap,所谓的质量压缩,它其实只能实现对file的影响,你可以把一个file转成bitmap再转成file,或者直接将一个bitmap转成file时,这个最终的file是被压缩过的,但是中间的bitmap并没有被压缩。bitmap.compress(Bitmap.CompressFormat.PNG,100,bos);
七、线程优化:
使用线程池。为什么要用线程池?
1、从“为每个任务分配一个线程”转换到“在线程池中执行任务”
2、通过重用现有的线程而不是创建新线程,可以处理多个请求在创建销毁过程中产生的巨大开销
3、当使用线程池时,在请求到来时间 ,不用等待系统重新创建新的线程,而是直接复用线程池中的线程,这样可以提高响应性。
4、通过和适当调整线程池的大小 ,可以创建足够多的线程以使处理器能够保持忙碌状态,同时还可以防止过多线程相互竞争资源而使应用程序耗尽内存或者失败。
5、一个App里面所有的任务都放在线程池中执行后,可以统一管理 ,当应用退出时,可以把程序中所有的线程统一关闭,避免了内存和CPU的消耗。
6、如果这个任务是一个循环调度任务,你则必须在这个界面onDetach方法把这个任务给cancel掉,如果是一个普通任务则可cancel,可不cancel,但是最好cancel
7、整个APP的总开关会在应用退出的时间把整个线程池全部关闭。
八、一些性能优化建议:
1)避免创建过多对象,造成频繁的gc
2)不要过多使用枚举,枚举占用的空间比整型大很多
3)字符串的拼接使用StringBuffer、StringBuilder来替代直接使用String,因为使用String会创建多个String对象,参考第一条。
4)适当使用软引用,(弱引用就不太推荐了)
5)使用内存缓存和磁盘缓存。
㈡ android怎么优化安装耗时
Android系统为了保证手机的稳定性和安全性,默认只能将应用程序安装到手机内存,这就相当于我们在电脑上安装软件时,只能安装到C盘(系统盘)一样。手机内存的空间本来就不大,安装几个应用程序就会被占去大半,所以我们要想办法让应用程序可以安装到存储卡中。这就是Apptosd,简称为App2sd。
虽然从Android2.2开始,系统自身就已经支持App2sd,但在安装软件时仍会默认安装到手机内存,需要我们到“设置-应用程序-管理应用程序”中打开要移动的应用程序详细页,点击其中的“移至SD卡”才能移到存储卡中。
超频加速手机CPU超频提高性能和电脑一样,手机中也有一个CPU,而手机的运行速度很大程度上也取决于CPU的优劣,因此我们经常会在手机论坛中看到一些高手通过对CPU进行超频的方法来改善手机性能,从而达到更加流畅的运行效果,因此,手机超频可以说是提升机器运行速度很可行的办法。
手机超频需要获取ROOT权限,利用软件就可以实现。下载超频工具SetCPU,首次进入SetCPU会让我们选择自动超频或者其他设置。超频这个词听起来似乎很高深,但只要按照一定设置过程操作,很容易就可以实现(注意频率不要一下调太高,超频有风险,超频需谨慎)。超频以后手机的游戏性能会有不少起色,但手机会比之前的发热量有所增加。
关闭后台进程释放手机内存
Android系统支持多任务处理,这也是很多用户放弃iphone选择Android的理由。但多任务带来的副作用就是长时间开机的话,手机会越用越慢,需要重启才能恢复正常。Android虽然自带任务管理器,却只能完成后台任务之间的切换,不能关闭后台程序。Android系统自带任务管理器,想关闭的话,需要进入设置-应用程序-管理应用程序,打开要关闭的软件详细页,点击其中的“强制停止”才行。使用AdvancedTaskManager高级任务管理器就要方便许多。下载安装后运行高级任务管理器,软件默认会显示当前正在后台运行的应用程序列表,每一项的后面都标注了占用的内存大小。
批量结束进程
Android系统很多软件都没有“退出”项,这一点起初让用了多年windows的用户们极为苦恼。而不久前有人表示,Android系统其实不需要关闭后台运行程序,相反这正是Android标榜的优势之一,但是很多用户仍然表示这样做是有效果的。相关人士表示,其实这两种观点都没有错,因为在Android系统自带的任务管理中,我们看到的程序都是刚刚运行过的,或是正在运行的,只要正常退出程序就不会占用过多内存。在后台一直能看到是为了加速下次启动,从而实现提高软件启动速度的目的。而当内存不够用时,系统会自动结束最早使用的程序来释放内存,所以对于一些小程序来说,不用经常手动结束任务就可以流畅运行。
㈢ 小米android9.1纯净深度优化是哪一版的
小米9MIUI11最新开发内核优化纯净版独家magisk超级省电极速流畅ROM介绍:1.源于MIUI11开发版解包...M版本V9.1.3.0基于版本MIUI稳定版适配机型小米Note2★ROM介绍MIUI是基于Android深度优化的手机操作系统。
在过去5年每周不间断的交流反馈中,MIUI开发组和用户一起全面提升了手机操作使用.2016-10-0919:46Mi_1088141523关注在使用安卓手机的时候,经常会遇到系统不流畅,界面卡顿,甚至死机重启的现象,作为Android之首的miui,它专小米手机的系统出厂的时候带的是miui,
所谓miui就是小米在Android2.3的基础上深度优化、定制、开发的第三方手机操作系统,可以刷原生的Android,也可以刷miui。这
㈣ 安卓手机有时开机就提示“Android正在启动 正在优化第N个应用(共N个)。”
安卓手机显示正在优化的处理方法:显示正在优化通常是在手机更新完系统后第一次开机进入桌面时,此为正常现象,等待优化完成后会自动进入桌面,如遇特殊情况优化一直无法完成,多为更新故障,可以进入rec重新安装更新包,双清重启手机后再试。
㈤ android 性能优化有哪些办法
性能优化的常用方法
主要内容包括布局优化,绘制优化,内存泄露优化,相应速度优化,ListView优化,Bitmap优化,线程优化等,下面主要给你举了其中的几个例子:
(1)布局优化
布局优化的思想很简单,就是尽量减少布局文件的层级。
如何进行优化呢?首先删除布局中无用的控件和层级,其次有选择地使用性能较低的ViewGroup,比如LinearLayout。如果布局中有的布局既可以用LinearLayout也可以用RelativeLayout,那就用LinearLayout,这是因为RelativeLayout比较复杂,他的布局过程花费更多的CPU时间。FrameLayout和LinearLayout一样都是一种简单高效的ViewGroup,因此可以考虑使用他们,但是很多时候,单纯的通过一个LinearLayout或者FrameLayout无法实现产品的效果,需要通过嵌套的方式来完成,这种情况建议采用RelativeLayout,因为ViewGroup的嵌套就相当于增加了布局的层级,同样会降低程序的性能。
布局优化的另一种手段是采用<include>标枪,<merge>标签和ViewStub。<include>标签主要用于布局重用,<merge>标签一般和<include>配合使用,它可以减少布局的层级。而ViewStub则提供了按需加载功能,当需要时才将ViewStub中的布局加载到内存,这提高了程序的初始化效率。
(2)绘制方法
绘制优化是指View的onDraw方法避免执行大量的操作,这主要有两方面。
首先,onDraw中不要创建新的布局对象,这是因为onDraw方法可能会被频繁调用,这样就会在一瞬间产生大量的临时对象,这不仅占用了过多的内存而且还会导致系统更加频繁的gc,降低了程序的执行效率。
另一方面,onDraw方法中不要做耗时的任务,也不能执行成千上万次循环操作,尽管每次循环都很轻量级,但是大量的循环仍然十分抢占CPU的时间片,这会造成View的绘制过程不流畅。
(3)内存泄露优化
内存泄露在开发过程中是一个需要重视的问题,但是由于内存泄露问题对开发人员的经验和开发意识要求比较高,因此这是开发人员最容易犯的错误之一。内存泄露的优化分为两个方面,一方面是在开发过程中避免写出内存泄露的代码,另一方面通过一些分析工具比如MAT来找出潜在的内存泄露继而解决。
关于性能优化的建议
1.避免黄健过多对象;
2.不要过多使用枚举,枚举占用的内存空间比整型大一些。
3.常量使用staticfinal来修饰。
4.使用一些Android特有的数据结构,比如SpareArray和Pair等,他们都具有更好的性能。
5.适当使用软引用和弱引用。
6.采用内存缓存和磁盘缓存
7.尽量采用静态内部类,这样可以避免潜在的内部类而导致的内存泄漏。
㈥ 安卓手机怎么设置 手机系统设置 手机性能才能提到最高
可以通过开启发者选项,并对开发者选项相关项进行优化设置,提高手机的流畅性。
(以小米手机为例)MIUI有很多的这样的功能,具体是菜单跳转的渐进渐出,窗口关闭与打开时的过渡效果等,虽然过渡的不是很慢,这个功能是在开发者选项里面设置,默认MIUI是隐藏了开发者选项的,如何开启开发者选项以及如何设置过渡动画可以按以下教程:
1、在手机主屏找到设置->关于手机。
5、如果将上面的效果设置为2,再返回去操作就会发现,比如打开设置,再点开其它菜单就会显得慢,会有渐入的感觉,让人觉得不能忍受,改到0.5或者关闭就快多了,直接弹出下一级菜单。
㈦ ios系统与android系统各自优缺点
IOS的优点:
系统专用于iphone手机,手机界面一致,可以统一进行升级和更新;
系统优化好,效率高,运行流畅,操作体验好,对硬件的要求相对低一些;
安全,由于所有应用均来自Apple
Store,经过严格审查才能上架,一般不会出现恶意应用。
IOS的缺点:
系统封闭,权限控制严格,用户受限制多,不适合喜欢钻研手机的发烧友。
安卓系统的优点:
系统开放,甚至源代码是开放的;
资源多,由于普及率高,开发者多,应用资源也多;
创新多,各Google、手机厂家和Rom开发者都不断推出新的UI,引入很多创新功能;
界面友好,操作体验不错。
安卓系统的缺点:
由于系统的开放性,给了恶意程序攻击的机会,尽管底层也加强了安全控制,总体而言,安全性不如IOS;
碎片化,由于系统的升级要通过手机厂家,导致系统升级缓慢,新版本不能很快得到推广,各种版本分布呈碎片状,很难得到统一;
效率比IOS低,对硬件要求高,由于应用的编译和运行机制限制,安卓系统一直存在越用越卡的情况,手机硬件不断提升,仍然存在不够用的情况。
Google一直在努力消除安卓系统的这些缺点,使安卓系统不断得到优化。
IOS和安卓系统是应用最广,最成功的两个手机操作系统,二者既相互竞争,往往也相互借鉴,促使双方共同发展和进步。
㈧ 手机安卓系统更新后一直处于这个画面,Android正在启动,正在优化第一
安卓手机显示正在优化的处理方法:显示正在优化通常是在手机更新完系统后第一次开机进入桌面时,此为正常现象,等待优化完成后会自动进入桌面,如遇特殊情况优化一直无法完成,多为更新故障,可以进入rec重新安装更新包,双清重启手机后再试。
㈨ 针对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性能优化的浅谈