Android面试大全(性能优化篇)

Android面试大全(四大组件篇)
Android面试大全(性能优化篇)
Android面试大全(异常处理篇)
Android面试大全(开源框架篇)
Android面试大全(网络篇)
Android面试大全(java篇)


前言

android中的性能优化这一方面不止是一道面试题,也是项目中必须要做的一件事情,只有做好的性能方面的优化,用户体验满意度才会有所提升

分类

启动黑白屏问题

  • 安装app后,启动时会有短暂的白屏,这大大影响整体的美观,姑且在这里也给算在性能优化这一块
    • 出现白屏原因
      系统加载布局文件是需要时间的,在刚启动时布局文件还没加载完毕(即setContentView(int)之前)显示的是window背景,出现的白屏(或黑屏)是window的背景色
    • 解决办法
    • 替换window的背景(可为图片或纯色)
      只需在启动activity界面根标签下设置android:theme="@style/MyTheme"属性
      自定义一个style
  <style name="Mytheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@mipmap/ic_launcher</item>//设置图片
        <item name="ndroid:windowBackground">@color/fireBar</item>//设置纯色
        <item name="android:windowNoTitle">true</item>//去title
    </style>
  • 注意事项
    • 设置属性只能设置在启动页,不能设置在application标签下,此标签代表全局
    • 设置图片最好是.9.png类型图片(此种图可适配机型),若使用.png图片需考虑不同机型适配问题(切多种分表率的图)

布局优化

  • 减少嵌套的层级(可使用RelativeLayout),减少嵌套层级可加快加载效率,
  • 使用style提取相同view的公共属性,减少重复代码
  • 使用include标签
  • 合理使用ViewStub

图片的优化

android中图片的使用是非常占用内存资源的。

  • ①:在图片未使用时,及时recycle()回收
  • ②:使用三级缓存,内存-sd卡-网络
    内存中再次获取最快,由于内存有限可能被gc回收,sd卡中的图片不会回收,当前面两种都不存在所需图片时,才去网洛下载
  • ③:将大图片进行压缩处理再放到内存中,用到BitmapFactory
/**创建缩略图方法
*filepath 图片路径
 i  压缩比例,最终为原图的1/(i^2)
*/
 private Bitmap onCreateThumbnail(String filePath, int i) {
         BitmapFactory.Options options=new BitmapFactory.Options();
        //设置为不读内容,值读取边界值
          options.inJustDecodeBounds=true;
         //通过编辑,得到边界值,并存入到option中
         BitmapFactory.decodeFile(filePath,options);
        //赋值缩放比例
         options.inSampleSize=i;
         //设置显示的图片格式
         options.inPreferredConfig=Config.RGB_565;
         //设置为读取内容,
         options.inJustDecodeBounds=false;
        //得到缩略图
         return BitmapFactory.decodeFile(filePath2, options);
     }
  • ④:尽量不在Button上使用selector来设置点击与正常时背景图,因为在button初始化时会将选中状态与正常状态的两张图都加载都内存中,无疑在无意中加大了内存的占用,可xml中设置正常的背景,在setOnTouchListener监听中通过代码动态改变,在按下时显示选中状态北京,抬起恢复
final Button button=new Button(this);
        button.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        //手指按下
                        button.setBackgroundResource(R.mipmap.down);
                        break;
                    case MotionEvent.ACTION_UP:
                        //手指抬起,恢复
                        button.setBackgroundResource(R.mipmap.up);
                        break;
                }
                //为了监听事件的分发,返回false
                return false;
            }
        });
  • 图片解码率也会影响图片所占内存
    常见的png,JPG,webp等格式的图片在设置到UI上之前需要经过解码过程,而图片采用不同的码率,也会造成对内存的占用不同。
    • ARGB_4444 格式的解码率,这种格式的图片,看起来质量太差,已经不推荐使用。 而强烈推荐使用ARGB_8888来代替。一个像素占用2个字节,alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占4个bites 。 共16bytes,即2个字节
  • ARGB_8888 格式的解码率,一个像素占用4个字节,alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占8个bytes , 共32bytes , 即4个字节。这是一种高质量的图片格式,电脑上普通采用的格式。它也是Android手机上一个BitMap的默认格式。
  • RGB_565格式的解码率,一个像素占用2个字节,没有alpha(A)值,即不支持透明和半透明, Red(R)值占5个bytes ,Green(G)值占6个bytes ,Blue(B)值占5个bytes,共16bytes,即2个字节。 对于半透明颜色的图片来说,该格式的图片能够达到比较好的呈现效果,相对于ARGB_8888来说也能减少一半的内存开销,因此它是一个不错的选择。推荐使用

大量数据优化

  • 分页加载
  • 缓存方式

列表项优化

  • listview的优化
    • convertview的复用(View的复用)
    • viewholder类的使用,减少查找控件的次数(findviewbyid()次数),将holder与view绑定来实现(.setTag().getTag()
    • 数据分页加载
  • RecycleView的优化

其他优化

  • 网络优化
    • 同一个页面数据尽量放到一个接口中去处理
  • 使用Application Context代替Activity Context
  • 谨慎使用static 关键字
    • static使用不当容易造成内存泄漏
  • 数据库优化
  • 电量优化
  • 多线程并发引发的性能等

正在持续跟新中……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容