- 博客(54)
- 资源 (2)
- 收藏
- 关注

原创 常用命令汇总
Android:adb shell ps 得到进程号adb shell am dumpheap 进程号 /storage/sdcard0/mem.hprof //倒出hprof文件adb reboot bootloader//重启进入fastboot模式fastboot flash system system.imgmake snod //产生一个新的系统映像system
2013-05-06 21:51:27
5339
原创 慎用Android Process setThreadPriority
最近几个版本,发现公司产品的线上启动时间,突然增加了2s左右,而且线下测试也能够测试在低端机器上,耗时增加明显。复现问题因为在低端机器上很容易复现,于是用红米note 1s测试,对比前后两个版本A和B,B版本确实会比A版本平均慢2s左右。在测试过程中会重复的安装与卸载apk,有的时候发现B版本时间跟A版本一样,很是奇怪。多次确认环境后,发现B版本登陆与不登陆应用,启动时间差别很大。分析问题既然在登陆
2016-07-20 19:19:08
10062
3
原创 Android CPU使用率:top和dump cpuinfo的不同
CPU是系统非常重要的资源,在Android中,查看CPU使用情况,可以使用top命令和dump cpuinfo。我记得很久以前,就发现这两者存在不同,初步猜测应该是算法上存在差异。最近需要采集应用CPU的使用率,看了一下两种CPU的计算方法。1、toptop是比较经典的CPU计算方法,top的代码在androidm/system/core/toolbox/top.c下面,输出process的cpu
2016-05-20 18:04:20
17528
3
原创 Android性能优化之路(五年之痒)
记得在上学的时候,就听说在某个方面坚持学习一年,也就入门了。很庆幸,工作五年了,一直都在做Android性能优化。一般来说,工作三年左右会是工作的一个门槛,五年左右会是另外一个门槛,所以最近非常的低落、迷茫。昨晚外面下着漂泊大雨,辗转反侧的我,在想自己这从业五年以来的经历。刚毕业的人,会觉得很多东西都很新鲜,那个时候主要是以学习为主,尤其是系统性能,初步了解每个模块,大概也需要一年左右的时间,一年左
2016-04-23 13:43:46
2364
原创 生活、工作、总结(十一)
不做Android性能的我,如果行尸走肉一般。难道技术这条路真的会这么艰辛?世间有伯乐,而后才有千里马,千里马常有,而伯乐不常有,我的伯乐在哪?我的路在何方?2016.03.06记,致迷茫的自己。。。
2016-03-06 22:32:25
933
1
原创 Android CPU FlameGraph
记得刚接触Android性能的时候,Android还是2.3,用的是TraceView,到Android 4.1的时候,又用了Systrace。TraceView可以称得上是Android APP的性能优化神器,然后Traceview的特点是对性能影响太大,几倍到几十倍的性能影响,导致很多时候,都不知道是代码的性能问题,还是工具本身的问题,虽然后来又采样的功能,但采样却是定期的去get thread
2016-01-24 20:22:23
2497
2
原创 生活、工作、总结(十)
好久没有更新博客了,因为实在是不知从何说起,换句话说,也就算过的不怎么的。工作上,接触了很多新的东西。也许是因为过于前沿,技术性很强,也许是自己能力不足,无法参透实物的本质,以至于自己显的无能为力。越来越不习惯这种十天半个月没有成果就会被追问日子了,多么怀念当年可以可以花一两月去解决一个问题的时候,那样的日子很辛苦,却很欣慰,可却一去不复还了。显然,对与想从本质上解决问题角度来说,别说一两周,一两个
2016-01-01 22:25:44
900
1
原创 Android Java和Native Memory Flame Graph
对于做性能的人来说,不知道问题所在时,最好可视化它,而Memory一直以来,都是性能关注的重点,然而在Android上,却也只能dumpsys meminfo这种运行古老的命令行查看内存,VM的内存好一点,可以dump hprof文件查看,但也是Static的方式,或者使用LeakCanary,查看内存泄露,也都是在memory leak境界,没有到memory performance的地步。大概在
2015-10-22 22:49:25
1989
3
原创 生活、工作、总结(九)
最近比较忙,忙的不可开交,然而却没有多少感觉。一直都有想写一本介绍Android性能优化的书的想法,然而开头了以后,确不敢再继续了,因为在这个行业待的时间越长,越觉的自己无知。以前的时候,经常在技术上感到迷茫,不知走向何方,现在见的越多,越感觉知识的匮乏,很多要学,很多想学,然而时间却并没有这么充足。面对问题的时候,多年建立起来那么点自信,也溃不成军了,那些觉得牛B哄哄的人的自信到底是哪来的?至少在
2015-09-27 18:30:58
1092
原创 生活、工作、总结(八)
不知不觉中,我又回归做性能接近三个月了,在performance这条路上,我已经走过四个年头了。知道性能的人很少,做性能的人更少,喜欢做性能的人,几乎找不到多少了,期间的艰辛似乎只有经历过的人才能明白。回到做性能,与以前的感觉完全不一样。毕业以来,一直都从事performance相关的工作,即使有变动,但还是做performance,更知道自己喜欢什么,所以更懂得珍惜。回来以后,就开始处理各种各样的
2015-08-18 20:59:56
1222
5
原创 生活、工作、总结(七)
不知不觉中,我已经工作四年了,在阿里工作一年了,没有想到会做性能一直做了四年。 有人跟我说,纯碎的做性能是没有发展前途的,以我现在情况来看,我也是这样觉得。一直喜欢做性能的原因是觉得性能需要对技术比较执着,而且性能是一个永远没有止境的方向,很感激我的师傅领我进入这个门。不知道为什么,阿里不流行师傅带徒弟,甚感遗憾,也许阿里是一个偏应用的地方,个人觉得对于系统或者底层来说,有人带,
2015-05-16 12:59:50
1107
原创 Android performance今天的发现
好久没有在Android Performance领域有什么新发现了,今天在跟踪问题的时候,突然发现Android也可以看到这样的图:在Android上找这种类型的图找了两年了,终于找到了。在Android Performance这条路上略感迷茫的时候,能找到这种图像,又看到了希望,继续坚持奋斗ing。路漫漫其修远兮,吾将上下而求索。
2015-01-23 22:55:11
2846
原创 生活、工作、总结(五)
不知不觉中2014就过完了,这一年对自己来说是个挑战,换了城市,换了工作,一切都是从零开始,些许失望,些许成功。 工作上,由以前做system performance换车了app performance。system performance技术性更强,app performance跟接近业务,需要了解业务的逻辑,唯一让我自己都诧异的是,我竟然跟手淘主链路相关模块负责人都打过交道。我一直
2015-01-11 21:36:27
1098
原创 阿里面试总结
2014.3.30 记得去年的时候,媳妇问我,在BAT三个公司中选一个,会去哪个公司?当时几乎没有多想,就说,阿里吧!阿里对我来说,有一种莫名的向往!只是随便聊聊天而已,觉得自己技术还没有达到要求,也没去多想。 世间的事就是那么奇怪,还真有人问我对阿里的工作感兴趣否,称为A吧!真的he感激A给我这次机会,。当然,虽然我觉得还没有准备好,但还是去试试的。电话面试了两次
2014-04-04 19:31:44
3327
1
原创 Android在创建硬件层慢的原因分析
最近在项目上,发现很多应用在开始滑动的时候,都会卡顿一下,看了一下systrace文件,可以看到在buildLayer的时候耗时比较长: 可以看到是在glTexImage2D耗时比较多。进一步使用GL Trace分析,可以看到:glTexImage2D(target = GL_TEXTURE_2D, level = 0, interna
2014-02-11 17:02:26
3411
原创 退出U盘模式后滑动Launcher卡顿的问题分析
最近公司的手机发现退出U盘模式后,在U盘存有图片等内容比较多的情况下,滑动Launcher会有一段时间卡顿的现象。其实不是最近的项目才有的问题,以前的项目就有,一直都没有解决而已,顽疾。 当然,是在U盘不同模式直接切换的时候出现了问题,跟负责Vold的一起分析了一下,没有发现什么异常的地方。测试的时候发现,U盘存储的内容越多,出现卡顿情况的时间越长,可能与media进程有关。不管怎
2014-02-11 11:47:40
3169
原创 Android计算函数时间戳的方法
对于做性能的人来说,知道时间的花在哪了是比较重要的,可以在函数前后得到系统的时间,计算时间戳能够得到每个函数的时间。在JAVA中可以通过System.currentTimeMillis()得到:long>View.draw(canvas);long>long>Log.i(TAG,"draw:>在native的代码中,可以通过下面的方式得到函数的执行时间:
2013-12-25 21:24:51
16690
原创 Android代码添加systrace跟踪
android 4.3系统上,应用可以使用 import android.os.Trace; Trace.beginSection("TEST"); Trace.endSection();添加systrace跟踪,然后通过thon systrace.py --app=TEST 指定apk。framework的java层代码里面添加systrace跟踪
2013-11-22 18:01:32
28102
原创 Android内存的使用
通常,对应Linux的系统来说,可以通过cat /proc/meminfo查看内存的使用情况,Android是基于Linux的,所有也可以使用adb shell cat /proc/meminfo查看内存的使用情况,如下所示:MemTotal: 1893284 kBMemFree: 823932 kBBuffers: 30628
2013-10-18 16:45:49
8581
原创 与dalvik GC相关的属性详解
在dalvik中,GC的类型有三种:1、GC_EXPLICIT: 应用主动调用System.gc()产生的GC事件。2、GC_FOR_ALLOC: 内存分配时,发现可用内存不够时触发的GC事件。3、GC_CONCURRENT: 给java层的class分配内存后,计算已分配的大小达到阈值(当前DVM heap size小一点)时会触发的GC事件。
2013-10-12 11:56:29
24694
1
原创 Android动态调试程序
以前在chinaunix上发过一遍同样的文章,原文内容如下(http://blog.chinaunix.net/uid-23738462-id-3244927.html):写程序的话,只要有思路,实现起来不会太难,而我们经常要做的是读别人的程序,自己写的程序如果没有好的注释的话,过一段时间以后,尚且不知道当时为什么这么写,何况是别人写的呢?在读别人程序的时候,弄清楚程序的流程是很重要的,输出程
2013-09-28 14:44:27
5223
5
原创 内存碎片导致应用不断被杀的问题
内存分配一波三折,小结一下:1. 先尝试快速分配,其中会从不同的zone以及迁移类型上去尝试,失败的话就进入慢速分配,里面会再划分单页面从pcp上分配以及多页面从伙伴系统中分配。2. 尝试慢速分配,一般流程就是唤醒内存页面回收线程,然后尝试低水位分配 -> 忽略水位分配 -> 压缩内存分配 -> 直接回收内存分配 -> oom killer杀死线程分配 -> 压缩内存分
2013-08-19 20:16:20
27048
原创 Android使用gdb调试native程序
1、push gdbserver到手机,并修改为可执行权限。adb shell push gdbserver /system/bin/adb shell chmod 777 /system/bin/gdbserver2、得到进程号并attact上进程。adb shell ps |grep system_serveradb shell gdbserver :1234 --atta
2013-08-02 16:01:44
3206
原创 配置内核支持Ftrace
1、添加下面的config:STRICT_MEMORY_RWX=nCONFIG_FUNCTION_TRACER=yCONFIG_HAVE_FUNCTION_GRAPH_TRACERCONFIG_FUNCTION_GRAPH_TRACER=yCONFIG_STACK_TRACER=yCONFIG_DYNAMIC_FTRACE=y去掉:CONFIG_STRICT_M
2013-06-22 16:39:09
2269
原创 通过Android trace文件分析死锁ANR
对于从事Android开发的人来说,遇到ANR(Application Not Responding)是比较常见的问题。一般情况下,如果有ANR发生,系统都会在/data/anr/目录下生成trace文件,通过分析trace文件,可以定位产生ANR的原因。产生ANR的原因有很多,比如CPU使用过高、事件没有得到及时的响应、死锁等,下面将通过一次因为死锁导致的ANR问题,来说明如何通过trace文件
2013-06-15 22:26:50
57828
1
原创 Intel和AT&T语法的主要区别
1、AT&T使用$表示立即操作数,Intel是不需要的。2、AT&T在寄存器名称前面加上前缀%,Intel不这么做。3、AT&T语法出来源和目的操作数与Intel是相反的。4、AT&T语法在助记符后面使用单独的字符来引用操作数中使用的长度。如movl $4, %eax。5、长调用和跳转使用不同语法定义段和偏移量。AT&T语法使用ljmp $section, $offset,而Int
2013-06-04 17:53:47
1637
原创 Android bootchart使用步骤
1、 主机安装bootchart工具 sudo apt-get install bootchart(Ubuntu)2、 生成支持bootchart的boot.img export INIT_BOOTCHART=truemake boot.img烧写boot.img到手机,重启手机3、 设定bootchart收集信息 的结束时间adb shell ‘echo 120>
2013-06-03 15:20:19
6093
原创 列表滑动、mdelay or msleep和对齐唤醒
1、列表滑动 记得从去年快放假的那两周,刚开始的时候,是很多人信息列表卡顿。通过不停的跟踪发现在显示文本的时候,Android不提倡使用硬件加速的方式。虽然Android 4.0以后,Android在很多地方都提倡用硬件加速的方式去绘图,以提高绘图效率,但对于中文的文本,这种方式是不可取的。原因在于中文编码比较多,而使用硬件加速的时候,进行了缓存操作,导致在中文文本比较多的
2013-05-28 15:09:39
3521
原创 在User模式下开启ftrace、adb root和traceview的方式
1.配置kernel,在config文件中删除下面的设定;# CONFIG_PERF_EVENTS is not set# CONFIG_HW_PERF_EVENTS is not set# CONFIG_PROFILING is not set# CONFIG_EVENT_TRACING is not set# CONFIG_EVENT_POWER_TRACING_DEP
2013-05-28 10:49:56
4573
原创 屏幕类型与分辨率表对应表
型号分辨率HVGA320*480WVGA480*800QHD540*960HD720*1280FHD1080*1920
2013-05-23 08:56:12
2847
原创 开机启动慢的原因分析
最近的项目开机启动花了40多秒,正常开机只需要28秒就能开机起来。内核的启动我没有去分析,另一个同事分析的。我主要是分析从SystemServer启来到开机动画结束显示解锁界面的这段时间,也就是开机动画的第三个动画开始到结束这段时间,这是个比较耗时阶段,一般都在17秒左右(见过牛B的手机,只需5秒)。 SystemServer分两步执行:init1和init2。init1主要
2013-04-29 13:46:31
4261
原创 性能工具
systrace:Android显示性能,可以看到每帧的情况。traceview:Android java层的性能。perf:适用于分析kernel。aprof:PowerTop:smem:cpufreq-bench:kernbench:lmbench:systemtapoprifole:适用于分析内核跟应用。Dtrace:适用于分析内核跟应用。
2013-04-07 21:51:30
1576
原创 参考学习资料
1、Androidhttp://blog.youkuaiyun.com/column/details/androidluo.html2、算法http://deeplearning.net/http://blog.youkuaiyun.com/yangliuy/article/category/1085633http://blog.youkuaiyun.com/v_JULY_vhttp://cs
2013-03-22 17:49:32
996
原创 生活、工作、总结(三)
又好久没有没有小结一下自己了,总结自己的时间越短,说明学的东西越多,越长,说明自己在荒废,在虚度,在混日过过,这是最不想的。过了一个年,20多岁了,这是自己唯一一个不在家过年的,心里有些许的愧疚,跑去见家长了,回了一趟西安,那个如此美好,如此淳朴、让人如此怀念的地方,自从离开了那,再也感受不到那种淳朴的民风了。过一个年跑了两个地方,每个地方待上五天不到的时间,好短。父母又老了,头发快白完了,回
2013-03-04 22:04:12
872
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人