导航:首页 > 操作系统 > android性能优化

android性能优化

发布时间:2022-01-15 10:53:20

android 性能优化有哪些

耗时任务异步处理;
布局文件优化;
不可见视图需要时加载;
应用内慎用多进程。
欢迎采纳

② android系统性能优化怎么学习

我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受到影响。会导致程序陷入卡顿、死掉甚至会发生系统错误。
为了加快响应速度,需要把费时的操作(比如网络请求、数据库操作或者复杂的计算)从主线程移动到一个单独的线程中。最高效的方式就是在类这一级完成这项操作,可以使用AsyncTask或者IntentService来创建后台操作。如果选择使用IntentService,它会在需要的时候启动起来,然后通过一个工作线程来处理请求(Intent)。

③ android 大量多线程怎么优化

在程序开发的实践当中,为了让程序表现得更加流畅,我们肯定会需要使用到多线程来提升程序的并发执行性能。但是编写多线程并发的代码一直以来都是一个相对棘手的问题,所以想要获得更佳的程序性能,我们非常有必要掌握多线程并发编程的基础技能。
众所周知,Android 程序的大多数代码操作都必须执行在主线程,例如系统事件(例如设备屏幕发生旋转),输入事件(例如用户点击滑动等),程序回调服务,UI 绘制以及闹钟事件等等。那么我们在上述事件或者方法中插入的代码也将执行在主线程。

一旦我们在主线程里面添加了操作复杂的代码,这些代码就很可能阻碍主线程去响应点击/滑动事件,阻碍主线程的 UI 绘制等等。我们知道,为了让屏幕的刷新帧率达到 60fps,我们需要确保 16ms 内完成单次刷新的操作。一旦我们在主线程里面执行的任务过于繁重就可能导致接收到刷新信号的时候因为资源被占用而无法完成这次刷新操作,这样就会产生掉帧的现象,刷新帧率自然也就跟着下降了(一旦刷新帧率降到 20fps 左右,用户就可以明显感知到卡顿不流畅了)。

为了避免上面提到的掉帧问题,我们需要使用多线程的技术方案,把那些操作复杂的任务移动到其他线程当中执行,这样就不容易阻塞主线程的操作,也就减小了出现掉帧的可能性。

那么问题来了,为主线程减轻负的多线程方案有哪些呢?这些方案分别适合在什么场景下使用?Android 系统为我们提供了若干组工具类来帮助解决这个问题。
AsyncTask: 为 UI 线程与工作线程之间进行快速的切换提供一种简单便捷的机制。适用于当下立即需要启动,但是异步执行的生命周期短暂的使用场景。
HandlerThread: 为某些回调方法或者等待某些任务的执行设置一个专属的线程,并提供线程任务的调度机制。
ThreadPool: 把任务分解成不同的单元,分发到各个不同的线程上,进行同时并发处理。
IntentService: 适合于执行由 UI 触发的后台 Service 任务,并可以把后台任务执行的情况通过一定的机制反馈给 UI。
了解这些系统提供的多线程工具类分别适合在什么场景下,可以帮助我们选择合适的解决方案,避免出现不可预期的麻烦。虽然使用多线程可以提高程序的并发量,但是我们需要特别注意因为引入多线程而可能伴随而来的内存问题。举个例子,在 Activity 内部定义的一个 AsyncTask,它属于一个内部类,该类本身和外面的 Activity 是有引用关系的,如果 Activity 要销毁的时候,AsyncTask 还仍然在运行,这会导致 Activity 没有办法完全释放,从而引发内存泄漏。所以说,多线程是提升程序性能的有效手段之一,但是使用多线程却需要十分谨慎小心,如果不了解背后的执行机制以及使用的注意事项,很可能引起严重的问题。

④ android 性能优化用的什么工具

推荐leb和猎豹清理大师

手机版LEB安全大师安卓版主要功能:
1.一键体检:扫描恶意软件.垃圾文件,一键修复
2.主动防御:独有主动防御功能,控制软件敏感权限,解决吸费/窃取隐私/偷跑流量问题
3.系统优化:一键结束进程,清除垃圾文件,手机加速
4.自启管家:独创后台自启控制,解决流氓软件自动启动,省电省内存
5.省电优化:多种省电模式,关闭耗电硬件,提供充电保护
6.上网监控:上网流量实时监控,流量超支自动断网
7.联网防火墙:独创联网防火墙,控制软件联网权限
8.病毒查杀:强力查杀病毒/木马/流氓软件
9.软件管理:批量卸载/批量移动/系统精简等功能
10.通信防火墙:智能拦截垃圾短信和骚扰电话,具备黑名单/白名单/关键字等拦截模式
11.防盗服务:换卡通知/防盗拍照/锁定手机/手机定位/销毁数据/数据备份/响铃报警/虚拟警告等多种功能, ROM安装模式
12.自动IP拨号,来去电归属地显示。

⑤ 安卓应用性能优化最佳实践好不好

安个360就够了吧,360可以优化也可以连接电脑

⑥ 如何对Android客户端性能优化

为什么我们的App需要优化,最显而易见的时刻:用户say,什么狗屎,刷这么久都没反应,取关卸载算了。
这跟什么有关,我们先苍白的反驳下,尼玛用户设备老旧网又烂,关我屁事,根本不用优化。可是,老板拍板了,施压给CTO,然后CTO又来找你:Y的今天必须给我想办法优化了,不然不准回家。
好吧,为什么从UI的表象上看,App又卡又慢而且还错乱。我们试着来剖析下吧。
题外话:把minSDK改到4.0+,去特么的low用户,连手机都不愿意换,还能指望它能给你带来多少营收么,直接pass掉吧。4.0前的系统bug不少,不能为了弥补这些bug而降低了整体的高性能。
好了,让我们先从UI说起:
首先要明白的是UI的绘制流程:measure-layout-draw,measure与layout都需要for loop所有的子控件,汇集起来才能完成绘制,布局。所以子控件越多,所消耗的时间越长(inflate,layout_weight,relative,多层嵌套等),减少不必要的子控件或层级,是相当有必要的。你可以通过merge,viewstub这些标签来减少层级嵌套。如果你的空间观念没那么好,可以用HierarchyViewer工具来检查。
对于Listview或者GridView这种多item的组件来说,复用item可以减少inflate次数,通过setTag,getTag的ViewHolder方式实现复用,这里要注意的是,holder中的控件最好reset后再赋值,避免图片,文字错乱。
对于ViewPager第一次显示时卡顿以及左右滑动卡顿,有以下几种优化方式:

ViewPager同时缓存page数最好为最小值3,如果过多,那么第一次显示时,ViewPager所初始化的pager就会很多,这样pager累积渲染耗时就会增多,看起来就卡。
每个pager应该只在显示时才加载网络或数据库(UserVisibleHint=true),最好不要预加载数据,以免造成浪费
图片显示不出来或者加载时间太长,怎么办?分两部分,下载速度,加载速度。

对于下载,要控制好同时下载的最大任务数(平均速度慢),同时给InputStream再包一层缓冲流会更快(如BufferedInputStream)。
对于加载速度,我们要知道一点,虽然下载的图片可能只有几百K,但是decode成bitmap所占用的内存可是成倍的,尽可能的减小图片size是根本因素,让服务端提供不同分辨率的图片才是最好的解决方案,内存总有耗尽的时刻,别老想着大分辨率会更清晰,实际就只有150*150的空间,非给弄张1000*1000的图片是不恰当的。另外论加载速度:内存>硬盘>网络,合理的使用内存缓存也是关键。假如自己写不好,没关系,有那么多开源的图片缓存框架,不用自己操心。
再说缓存
有很多种缓存方式,也不用Stay列举了,我们要说的是搭配使用。

比方说,以前我们一直在用强引用,HashMap,后来我们发现占内存,我们就用软引用,弱引用来及时回收,再后来因为回收机制不可控,所以又有了lrucache,disklrucache通过算法来平衡内存与硬盘缓存。随着android版本的推进与演化,我们也应该拥抱变化。如果你的App里还有软引用,弱引用的地方,不妨再check下。
比方说网络+数据库。网络我们一般都是去主动获取,而非被动接受。那如果说数据是重复的或者未更改的呢?那我们去取一次网络数据有什么意义呢?我的解决方案是给每个activity或fragment或每个组件设置一个最大请求间隔,比如一个listview,第一次请求数据时,保存一份到数据库,并记下时间戳,当下次重新初始化时,判断是否超过最大时间间隔(如5分钟),如果没有,只加载数据库数据,不需要再做网络请求。当然,还有一些隐式的http请求框架会缓存服务器数据,在一定时间内不再请求网络,或者当服务器返回304时将之前缓存的数据直接返回。
反正也说到网络了,那我们也来说说

现在有很多现成HTTP框架供我们使用,我们几乎只用写配置就可以搞定一个url请求,但是这里有很多需要服务端配合的,比如:json数据格式,WebP代替jpg,支持断点续传,多个请求合并成一个,尽量不做重定向,服务器缓存以及负载均衡等。
对客户端本身,除了上述的实现,我们还需要合理的缓存,控制最大请求并发量,及时取消已失效的请求,过滤重复请求,timeout时间设置,请求优先级设置等。
优化可不是一个人的事,实现一个功能简单,但是想优化重构,那是很不容易的事。需要多方面的预判与联调。合理的假设与实践是优化最重要的手段。
说完这些具体的点,我们再来说说一些常识,或者称之为代码规范。

你要知道for loop中不要声明临时变量,不到万不得已不要在里面写try catch。
明白垃圾回收机制,避免频繁GC,内存泄漏,OOM(有机会专门说)
合理使用数据类型,比如StringBuilder代替String,(笔试题最常见的是str+="str"中有几个对象) ,少用枚举enum,少用父类声明(List,Map)
如果你有频繁的new线程,那最好通过线程池去execute它们,减少线程创建开销。
你要知道单例的好处,并正确的使用它。
多用常量,少用显式的"action_key",并维护一个常量类,别重复声明这些常量。
如果可以,至少要弄懂设计模式中的策略模式,组合模式,装饰模式,工厂模式,观察者模式,这些能帮助你合理的解耦,即使需求频繁变更,你也不用害怕牵一发而动全身。需求变更不可怕,可怕的是没有在写代码之前做合理的设计。
当然还有很多很多,Stay所说的也只是一个大的轮廓,还是需要自己不断的尝试。会开发写代码跟会做产品的区别还是蛮大的,仅仅是态度就能刷死80%的码农了。当你碰到一些需要优化的地方,耐心的去分析,时间的累积会让你成为真正的工程师。
另外优化也没有绝对的完美,每一次优化都是基于当前的环境来做的,要明白沟通是最好的优化,不盲从,不随便,三思而后行。
Android上如何做性能优化的?大概写三年代码就能差不多知道了。

⑦ 针对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应用性能优化 这本书怎么样

    《Android应用性能优化》是人民邮电出版社2012-10出版的图书。
    就目前来说,已经跟不上潮流了。建议看新一点的书。

    ⑨ 如何对Android进行性能优化

    不知道你是说对系统优化还是什么app优化,

    系统优化就只能找底层人员的了,我也不是很了解。

    app优化的话,大体有以下几个方面

    1. ui优化,去除累赘的布局,优化初始化的速度,提高apk流畅性。

    2. 网络交互优化,好的网络和数据处理方式决定了app的体验性能。

    3. 检查内存是否有泄漏,人们常说的anr详细。

    如何你问的是android手机优化。

    平常人只能下载手机管家这种软件进行清除内存,垃圾,卸载无用的apk,保持android系统的流畅性。

    ⑩ Android应用性能优化的内容简介

    今天的Android应用开发者经常要想尽办法来提升程序性能。由于应用越来越复杂,这个问题也变得越来越棘手。本书主要介绍如何快速高效地优化应用,让应用变得稳定高效。你将学会利用Android SDK和NDK来混合或单独使用Java、C/C++来开发应用。书中还特别讲解了如下内容:
    · 一些OpenGL的优化技术以及RenderScript(Android的新特性)的基础知识;
    · 利用SDK来优化应用的Java代码的技巧;
    · 通过高效使用内存来提升性能的技巧;
    · 延长电池使用时间的技巧;
    · 使用多线程的时机及技巧;
    · 评测剖析代码的技巧。
    把本书的内容学以致用,你的编程技术就会得到关键性的提升,写出的应用就会更为健壮高效,从而广受用户好评,并最终获得成功。
    目录
    第1章Java代码优化1.1Android如何执行代码1.2优化斐波纳契数列1.2.1从递归到迭代1.2.2BigInteger1.3缓存结果1.4API等级1.5数据结构1.6响应能力1.6.1推迟初始化1.6.2StrictMode1.7SQLite1.7.1SQLite语句1.7.2事务1.7.3查询
    第1章Java代码优化1.1Android如何执行代码1.2优化斐波纳契数列1.2.1从递归到迭代1.2.2BigInteger1.3缓存结果1.4API等级1.5数据结构1.6响应能力1.6.1推迟初始化1.6.2StrictMode1.7SQLite1.7.1SQLite语句1.7.2事务1.7.3查询1.8总结
    第2章NDK入门2.1NDK里有什么2.2混合使用Java和C/C++代码2.2.1声明本地方法2.2.2实现JNI粘合层2.2.3创建Makefile2.2.4实现本地函数2.2.5编译本地库2.2.6加载本地库2.3Application.mk2.3.1为(几乎)所有设备优化2.3.2支持所有设备2.4Android.mk2.5使用C/C++改进性能2.6本地Acitivity2.6.1构建缺失的库2.6.2替代方案2.7总结
    第3章NDK进阶3.1汇编3.1.1最大公约数3.1.2色彩转换3.1.3并行计算平均值3.1.4ARM指令3.1.5ARM NEON3.1.6CPU特性3.2C扩展3.2.1内置函数3.2.2向量指令3.3技巧3.3.1内联函数3.3.2循环展开3.3.3内存预读取3.3.4用LDM/STM替换LDR/STD3.4总结
    第4章高效使用内存4.1说说内存4.2数据类型4.2.1值的比较4.2.2其他算法4.2.3数组排序4.2.4定义自己的类4.3访问内存4.4排布数据4.5垃圾收集4.5.1内存泄漏4.5.2引用4.6API4.7内存少的时候4.8总结
    第5章多线程和同步5.1线程5.2AsyncTask5.3Handler和Looper5.3.1Handler5.3.2Looper5.4数据类型5.5并发5.6多核5.6.1为多核修改算法5.6.2使用并发缓存5.7Activity生命周期5.7.1传递信息5.7.2记住状态5.8总结
    第6章性能评测和剖析6.1时间测量6.1.1System.nanoTime()6.1.2Debug.threadCpuTimeNanos()6.2方法调用跟踪6.2.1Debug.startMethodTracing()6.2.2使用Traceview工具6.2.3DDMS中的Traceview6.2.4本地方法跟踪6.3日志6.4总结
    第7章延长电池续航时间7.1电池7.2禁用广播接收器7.3网络7.3.1后台数据7.3.2数据传输7.4位置7.4.1注销监听器7.4.2更新频率7.4.3多种位置服务7.4.4筛选定位服务7.4.5最后已知位置7.5传感器7.6图形7.7提醒7.8WakeLock7.9总结
    第8章图形8.1布局优化8.1.1相对布局8.1.2合并布局8.1.3重用布局8.1.4ViewStub8.2布局工具8.2.1层级视图8.2.2layoutopt8.3OpenGL ES8.3.1扩展8.3.2纹理压缩8.3.3Mipmap8.3.4多APK8.3.5着色8.3.6场景复杂性8.3.7消隐8.3.8渲染模式8.3.9功耗管理8.4总结
    第9章RenderScript9.1概览9.2Hello World9.3Hello Rendering9.3.1创建渲染脚本9.3.2创建RenderScriptGL Context9.3.3展开RSSurfaceView9.3.4设置内容视图9.4在脚本中添加变量9.5HelloCompute9.5.1Allocation9.5.2rsForEach9.5.3性能9.6自带的RenderScript API9.6.1rs_types.rsh9.6.2rs_core.rsh9.6.3rs_cl.rsh9.6.4rs_math.rsh9.6.5rs_graphics.rsh9.6.6rs_time.rsh9.6.7rs_atomic.rsh9.7RenderScript与NDK对比9.8总结

    阅读全文

    与android性能优化相关的资料

    热点内容
    编译属于高级程序设计语言吗 浏览:173
    c语言与图案编程 浏览:337
    androidsqlite查询语句 浏览:713
    创投圈用什么app 浏览:763
    命令与征服3泰伯利亚战争109补丁 浏览:787
    生成树机制算法 浏览:547
    单片机学习资料下载 浏览:632
    用电视看韩剧用什么app好 浏览:684
    自动获取文件夹 浏览:513
    在那个文件夹找到做同款 浏览:895
    androidpem证书 浏览:574
    apache安装教程linux 浏览:980
    安卓手机的三种锁都是什么锁 浏览:123
    编程猫的优质同人通关 浏览:238
    计算机编程二级考试成绩查询 浏览:878
    linux进入mysql数据库命令 浏览:834
    英语早教app哪个好 浏览:916
    程序员考试大纲2022 浏览:751
    31岁程序员的感受 浏览:790
    30程序员转行教师 浏览:774