文档章节

Android studio Inspection 优化笔记

 净琉璃
发布于 2017/05/04 15:44
字数 955
阅读 23
收藏 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 修复等: ......

局长
11/19
0
0
张高兴的 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
Android Studio 3.2新功能特性

android studio3.2预览版本已经发布了,下面这些功能在最新的版本已经提供,但可能尚未在测试版本中发布渠道中提供。 什么是新的助理 Android Studio 3.2有一个新的Assistant面板,可以通知您...

我就是马云飞
06/14
0
0
Android Studio 3.2 Canary 发布,新增大量实用功能

在今天的 Google 2018 I/O 大会上,释出了 Android Studio 3.2 的最新预览版,并带来了一系列的新功能,如支持 Android P 开发预览版、新的 Android App Bundle,以及 Android Jetpack。官方...

局长
05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP动态扩展Redis模块

查看已有模块 [root@test-a ~]# /usr/local/php/bin/php -m[PHP Modules]bz2Core...zlib[Zend Modules] 下载包,解压,生成configure文件 [root@test-a ~]# cd /usr/local/src/[ro......

野雪球
25分钟前
1
0
在Ignite中使用线性回归算法

在本系列前面的文章中,简单介绍了一下Ignite的机器学习网格,下面会趁热打铁,结合一些示例,深入介绍Ignite支持的一些机器学习算法。 如果要找合适的数据集,会发现可用的有很多,但是对于...

李玉珏
32分钟前
2
0
Mybatis应用学习——简单使用示例

1. 传统JDBC程序中存在的问题 1. 一个简单的JDBC程序示例: public class JDBCDemo {public static void main(String[] args) {Connection con=null;PreparedStatement statemen...

江左煤郎
39分钟前
2
0
使用JavaScript编写iOS应用业务逻辑

JSAUIKitCocoa使你可以使用JavaScript编写对性能要求不高但可能变动性很大的iOS应用的业务逻辑部分,View组件、需要多线程支持的Model等则直接使用原生对象。 编写方式与React Native相似,但...

neal01
44分钟前
1
0
艺术品区块链溯源防伪平台(连载一)

Netkiller Blockchain 手札 作者正在找工作,联系方式 13113668890 Mr. Neo Chan, 陈景峯(BG7NYT) 中国广东省深圳市望海路半岛城邦三期 518067 +86 13113668890 <netkiller@msn.com> 文档始创...

netkiller-
45分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部