zoukankan      html  css  js  c++  java
  • Android小经验

    转载自:http://mp.weixin.qq.com/s?__biz=MzA4MjU5NTY0NA==&mid=404388098&idx=1&sn=8bbbba7692dca68cdda2212dec4d86c0&scene=21#wechat_redirect

    今天是冯建同学投稿。总结他在Android开发方面的各种小经验,我认为很有意义,所谓经验丰富有时候是指积累的这些小经验许多,他这篇分享相信会帮助到一些朋友。我也曾推荐过他的 APK魔鬼瘦身 一文。没看过的朋友也能够再去看看。

    做Android久了,就会踩非常多坑,被坑得多了就有经验了,闲暇之余整理了部分,现挑选一些重要或者偏门的“小”经验做个记录。

    查看SQLite日志


    由于实现里用了Log.isLoggable(TAG, Log.VERBOSE)做了推断,在LessCode的LogLess中也參考了这样的机制:https://github.com/openproject/LessCode/blob/master/lesscode-core/src/main/java/com/jayfeng/lesscode/core/LogLess.java

    使用这样的方法就能够在Release版本号也能做到查看应用的打印日志了。

    PNG优化

    APK打包会自己主动对PNG进行无损压缩,假设自行无损压缩是无效的。
    当然进行有损压缩是能够的:https://tinypng.com/

    Tcpdump抓包

    有些模拟器比方genymotion自带了tcpdump,假设没有的话,须要下载tcpdump:
    http://www.strazzere.com/android/tcpdump


    把tcpdump push到/data/local下。抓包命令:


    查看签名

    非常多开发人员服务都须要绑定签名信息,用以下的命令能够查看签名:

    注意,这个是须要password的,能够查看MD5, SHA1。SHA256等等。

    单例模式(懒汉式)的最佳写法

    特别讲到这个问题。是由于网上非常多这种代码:

    这样的写法线程不安全,改进一下,加一个同步锁:

    网上这种代码很多其它。能够非常好的工作,可是缺点是效率低。

    实际上。早在JDK1.5就引入volatilekeyword,所以又有了一种更好的双重校验锁写法:


    这才是最佳写法!

    。!


    不是说另外一种写法有问题,或者在Android中一定要用第三种写法。仅仅是告诉大家一种更好的写法。

    多进程Application

    是不是常常发现Application里的方法运行了多次?百思不得其解。

    由于当有多个进程的时候。Application会运行多次,能够通过pid来推断那些方法仅仅运行一次,避免浪费资源。

    隐式启动Service

    这是Android5.0的一个修改。不支持隐式的Service调用。以下的代码在Android 5.0+上会报错:Service Intent must be explicit:

    可改成例如以下:


    fill_parent的寿命

    在Android2.2之后,支持使用match_parent。你的布局文件中是不是既有fill_parent和match_parent显得非常乱?

    假设你如今的minSdkVersion是8+的话。就能够忽略fill_parent。统一使用match_parent了,否则请使用fill_parent。

    ListView的局部刷新

    有的列表可能notifyDataSetChanged()代价有点高,最好能局部刷新。

    局部刷新的重点是,找到要更新的那项的View,然后再依据业务逻辑更新数据就可以。

    强调一下。最后那个列表数据别忘记更新, 不然数据源不变。一滚动可能又还原了。

    系统日志中几个重要的TAG


    一行居中,多行居左的TextView

    这个一般用于提示信息对话框,假设文字是一行就居中。多行就居左。
    在TextView外套一层wrap_content的ViewGroup就可以简单实现:


    setCompoundDrawablesWithIntrinsicBounds()

    网上一大堆setCompoundDrawables()方法无效不显示的问题,然后解决方法是setBounds。须要计算大小…


    不用这么麻烦,用setCompoundDrawablesWithIntrinsicBounds()这种方法最简单!

    计算程序执行时间

    为了计算一段代码执行时间,一般的做法是,在代码的前面加个startTime,在代码的后面把当前时间减去startTime,这个时间差就是执行时间。

    这里提供一种写起来更方便的方法。全然无时间逻辑。仅仅是加一个打印log就够了。

    没有计算时间的逻辑,这能測出来?

    把日志过滤出来,执行命令“adb logcat -v time | grep TAG”:

    通过-v time參数,能够比較日志左边的时间来算出中间的代码执行的时间。

    Java引用类型一览表


    Context使用场景

    为了防止Activity,Service等这种Context泄漏于一些生命周期更长的对象,能够使用生命周期更长的ApplicationContext,可是不是全部的Context的都能替换为ApplicationContext

    这是网上流传的一份表格:

    图片缓存大小

    如今非常多图片库须要给图片设置一个最大缓存。可是这个值设置多少合适呢?

    高端机和低端机的配置显然应该不同,能够考虑设置一个动态值。

    建议设置为应用可用内存的1/8:


    系统内置的一些工具类

    在AOSP源代码全局搜了一下包括Utilkeyword的类。整理出这个列表供大家參考:


    这么多工具类,一定能够找到对你实用的。

    ClipPadding

    这个不多说,ListView的ClipPadding设为false。就能为ListView设置各种padding而不会出现丑陋的滑动“禁区”了。

    强大的dumpsys

    dumpsys能够查看系统服务和状态,很强大,可通过例如以下查看全部支持的子命令:

    这里列举几个略微经常使用的:

    bugreport命令

    非常多人都用过adb logcat,可是假设想要更具体的信息,logcat则无能为力。

    所以大多数手机厂商測试很多其它的是用adb bugreport来抓log给开发者分析。


    dpi目录的换算比例


    更新媒体库文件

    曾经做ROM的时候常常碰到一些第三方软件(某音乐APP)下载了新文件或删除文件之后,可是媒体库并没有更新,由于这个是须要第三方软件主动触发。

    媒体库会在手机启动。SD卡插拔的情况下进行全盘扫描,不是实时的并且代价比較大,所以单个文件的刷新非常有必要。

    Monkey參数

    大家都知道,跑monkey的參数设置有一些要注意的地方,比方太快了不行不切实际,太慢了也不行等等。这里给出一个參考:


    一边跑monkey,一遍抓log吧。

    小结

    不管是大经验还是小经验,都是好经验,关键时候出奇效。

  • 相关阅读:
    httpd apache服务 安装
    kafka 安装
    azkaban 安装
    zookeeper 安装
    elasticsearch 安装
    mongodb 安装
    Spark 实例
    【剑指offer28:字符串的排列】【java】
    数组的toString方法
    object类的equals方法简介 & String类重写equals方法
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7118376.html
Copyright © 2011-2022 走看看