Android的一些小经验

Png优化

APK打包会自动对PNG进行无损压缩,如果自行无损压缩是无效的。
当然进行有损压缩是可以的:https://tinypng.com/

Tcpdump抓包

有些模拟器比如genymotion自带了tcpdump,如果没有的话,需要下载tcpdump:
http://www.strazzere.com/android/tcpdump
把tcpdump push到/data/local下,抓包命令:
adb shell  /data/local/tcpdump -i any -p -s 0 -w /sdcard/capture.pcap


查看签名


很多开发者服务都需要绑定签名信息,用下面的命令可以查看签名:
keytool -list -v -keystore release.jks

ListView的局部刷新

有的列表可能notifyDataSetChanged()代价有点高,最好能局部刷新。
强调一下,最后那个列表数据别忘记更新, 不然数据源不变,一滚动可能又还原了。
局部刷新的重点是,找到要更新的那项的View,然后再根据业务逻辑更新数据即可。
private void updateItem(int index) {
    int visiblePosition = listView.getFirstVisiblePosition();
    if (index - visiblePosition >= 0) {
        //得到要更新的item的view
        View view = listView.getChildAt(index - visiblePosition);


    }
}

系统日志中几个重要的TAG
// 查看Activity跳转
adb logcat -v time | grep ActivityManager
// 查看崩溃信息
adb logcat -v time | grep AndroidRuntime
// 查看Dalvik信息,比如GC
adb logcat -v time | grep "D\/Dalvik"
// 查看art信息,比如GC
adb logcat -v time | grep "I\/art"

一行居中,多行居左的TextView

这个一般用于提示信息对话框,如果文字是一行就居中,多行就居左。
在TextView外套一层wrap_content的ViewGroup即可简单实现:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- 套一层wrap_content的ViewGroup -->
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true">


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    </LinearLayout>
</RelativeLayout>


JAVA引用类型一览表


对象引用:强引用 > 软引用 > 弱引用 > 虚引用。


引用类型 回收时机 用途 生存时间
强引用 从来不会 对象的一般状态 JVM停止运行时终止
软引用 在内存不足时 对象缓存 内存不足时终止
弱引用 在垃圾回收时 对象缓存 GC运行后终止
虚引用 在垃圾回收时 对象跟踪 GC运行后终止

Context使用场景

为了防止Activity,Service等这样的Context泄漏于一些生命周期更长的对象,可以使用生命周期更长的ApplicationContext,但是不是所有的Context的都能替换为ApplicationContext
这是网上流传的一份表格:

                                Application       Activity        Service           ContentProvider BroadcastReceiver
Show Dialog                      否              是   否                    否           否
Start Activity                 否              是    否                   否          否
Layout Inflation              否              是    否                  否          否
Start Service              是            是            是                是           是
Bind Service                  是            是           是                是           否
Send Broadcast            是            是        是               是          是
Regist BroadcastReceiver   是           是       是                 是         否
Load Resource Value        是     是        是              是          是




dpi文件夹的换算比例
之前的ldpi基本可以抛弃了,主流的dpi已经从很早之前的mdip转移到了xhdpi了,特别提醒。


PPI                RESOLUTION      DP      PX
mdpi(160dp)    320P              1      1
hdpi(240dp)    480P              1     1.5
xhdpi(320dp)    720P              1       2
xxhdpi(480dpi)  1080P               1     3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值