文档章节

Android studio Inspection 优化笔记

 净琉璃
发布于 2017/05/04 15:44
字数 955
阅读 26
收藏 0

以下内容皆为基于百度后一些内容整合,这个笔记只是为了自己日后方便查看所做,若有不对之处,请大家多多指教。

  • Android > Lint > Performance 

1、HashMap can be replaced with SparseArray

      一般Key为int型时可以使用SparseArray替代HashMap使用,SparseArray是Android所独有的,其目的是为了更加节省内存资源

      好处2点:1、装载速度更快 2、消耗内存更小  

      缺点:如果是倒序插入值的时候 不建议使用SparseArray替代,因为会比正序插入转载时间多了大约10倍

2、Handler reference leaks

      在应用程序线程的MessageQueue中排队的Message对象 还保留他们的目标Handler。如果Handler是一个内部类(注:无论是匿名还是非匿名,匿名是比较常见用法),它的外部类将被保留(至于为什么, 请参考Java嵌套类相关说明)。为了避免泄漏外部类,声明一个Handler子类为静态内部类(注:这样就避免了Handler对象对外部类实例的自动引用),其内部持有一个对外部类对象的WeakReference。

总结:1、在 onDestroy中使用 mHandler.removeCallbacksAndMessages( null ); 清除该 Handler为target的所有Message(包括Callback)
   2、Handler的实现类采用静态内部类的方式,避免对外部类的强引用,在其内部声明一个WeakReference引用到外部类的实例。
static class MyHandler extends Handler {
        // WeakReference to the outer class's instance.
        private WeakReference<myactivity> mOuter;
 
        public MyHandler(MyActivity activity) {
            mOuter = new WeakReference<myactivity>(activity);
        }
 
        @Override
        public void handleMessage(Message msg) {
            MyActivity outer = mOuter.get();
            if (outer != null) {
                // Do something with outer as your wish.
            }
        }
    }
更多说明可以看下边的链接~

Android Handler leak 分析及解决办法


3、Inefficient layout weight

当在一个LinearLayout布局中仅包含一个定义weight属性的view控件时,直接指定0dp到其width或height属性更高效,因为在初始化时不再需要测量这个view控件的尺寸,反正到最后它都会霸占所有剩余空间的了。

4、Memory allocations within drawing code

在实际开发中Android中自带的控件有时无法满足我们的需求,这时就需要我们重写控件来实现我们想要的功能。

还有个关于UI体验的问题,就是在onDraw()函数中最好不要去创建对象,否则就提示下面的警告信息:因为onDraw()调用频繁,不断进行创建和垃圾回收会影响UI显示的性能

5、Missing baselineAligned attribute

当LinerLayout的子View都是ViewGroup(自定义控件除外)时,Lint认为它的子View已经不需要基准线对齐了,为了不让LinerLayout去做无用的计算对齐的操作,提出了如上警告,修改掉之后就可以提高性能。当LinerLayout的子View都是ViewGroup(自定义控件除外)时,Lint认为它的子View已经不需要基准线对齐了,为了不让LinerLayout去做无用的计算对齐的操作,提出了如上警告,修改掉之后就可以提高性能。

6、Nested weights are bad for performance

原因分析:在布局进行嵌套使用时,父布局与子布局都使用了android:layout_weight,但不是必须使用时,便会出现如题所示的警告信息。

  解决方法:根据实际情况,去除子布局中非必须使用的android:layout_weight。

7、Do not place Android context classes in static fields

 不去使用静态的context 也不要在Application中设置静态的context来使用,使用context的时候根据使用的场景 判断一下应该使用什么样的context
Android Context 上下文 你必须知道的一切       使用ApplicationContext作为全局变量引用的缺陷   




由于参考内容过多,本文改为译文咯~~

本文转载自:http://blog.csdn.net/wxm1225929690/article/details/53183637

共有 人打赏支持
粉丝 1
博文 89
码字总数 20910
作品 0
杭州
高级程序员
私信 提问
Android Studio 3.4 Canary 4 发布

Android Studio 3.4 Canary 4 现已发布,可通过 Canary 和 Dev 通道获取更新。 下载地址 >>> https://developer.android.com/studio/preview/index.html 更新内容包括新特性和 bug 修复等: ......

局长
2018/11/19
901
0
Android Studio 1.3 RC3 发布

Android Studio 1.3 RC3 发布,此版本现已推送到 canary 频道,只是之前 RC 的 bug 修复版本: Tweak the default IDE heap size to be a bit larger Turn off EAP mode (reduces internal v......

oschina
2015/07/18
4.7K
20
用 Lint 优化您的代码

除了测试 Android 的应用程序是否满足功能要求外,确定你的代码没有结构问题也相当重要。代码架构不完善会影响 Android 应用程序的可靠性和运行效率,同时也会使代码更难维护。比如,如果你的...

oschina
2016/09/20
3.5K
1
张高兴的 Xamarin.Android 学习笔记:(一)环境配置

  最近在自学 Xamarin 和 Android ,同时发现国内在做 Xamarin 的不多。我在自学中间遇到了很多问题,而且百度到的很多教程也有些过时,现在打算写点东西稍微总结下,顺便帮后人指指路了。...

张高兴
2017/01/13
0
0
ubuntu12.04 安装Android Studio笔记

Ubuntu安装Android Studio 说明 安装教程参考stormzhang的博客 所有的软件在这里(已经备份到自己的pan) 注:此笔记在gitbook下完成,扔到osc上看看对markdown的支持如何?(结果是gitbook太...

cyper
2015/01/30
0
16

没有更多内容

加载失败,请刷新页面

加载更多

Java并发编程基础(三)

线程间通信 线程间通信称为进程内通信,多个线程实现互斥访问共享资源时会互相发送信号货这等待信号,比如线程等待数据到来的通知,线程收到变量改变的信号。 线程阻塞(同步)和非阻塞(异步)...

chendom
12分钟前
1
0
阿里重磅开源首款自研科学计算引擎Mars,揭秘超大规模科学计算

日前,阿里巴巴正式对外发布了分布式科学计算引擎 Mars 的开源代码地址,开发者们可以在pypi上自主下载安装,或在Github上获取源代码并参与开发。 此前,早在2018年9月的杭州云栖大会上,阿里...

阿里云官方博客
22分钟前
2
0
我是怎样和Linux系统结缘并通过红帽RHCE认证的

我高考完当时就是选择的计算机科学与技术专业,上大学以后联想到的和计算机相关的就只有写代码,开发,网站,网页设计,就没有其他的了,当时学习写代码也都是在Windows上,什么C#、C++之类的...

问题终结者
31分钟前
2
0
SSH之端口转发

第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能带...

无语年华
36分钟前
1
0
我是怎样和Linux系统结缘并通过红帽RHCE认证的

我高考完当时就是选择的计算机科学与技术专业,上大学以后联想到的和计算机相关的就只有写代码,开发,网站,网页设计,就没有其他的了,当时学习写代码也都是在Windows上,什么C#、C++之类的...

linuxprobe16
54分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部