今日看点

1.gradle配置多个打包

android层级下可以配置签名信息:

    signingConfigs {
        release {
            storeFile file("C:\\Users\\Administrator\\Desktop\\xqw.jks")
            storePassword "111111"
            keyAlias "111111"
            keyPassword "111111"
        }


        dev {
            storeFile file("C:\\Users\\Administrator\\Desktop\\xqw.jks")
            storePassword "111111"
            keyAlias "111111"
            keyPassword "111111"
        }
    }

buildTypes中配置对应版本

    buildTypes {
        release {
            signingConfig signingConfigs.release
            applicationIdSuffix ".release"
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }


        dev {
            signingConfig signingConfigs.dev
            applicationIdSuffix ".dev"
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

可以自己指定签名和后缀信息以区分包

productFlavors区分不同渠道的包的信息,与buildType中配置不能重名,例如再命名为release,dev等。利用manifestPlaceholders可以配置清单文件中的信息。其中AndroidManifest.xml中的um的值是以$[xxx]方式配置的。

    productFlavors {
        flavors_release {
            manifestPlaceholders["um", "release"]
            resValue("string", "flag", "release")
        }


        flavors_dev {
            manifestPlaceholders["um", "dev"]
            resValue("string", "flag", "release")
        }
    }

可以通过命令行或者视图方式打包,通过命令行则是在console窗口中gradlew assemble。如果直接用gradlew方式打包会出现下载gradle的情况,实在太慢了,方法就是将gradle的对应版本的根目录配置到环境变量。




2.java嵌套类造成内存泄漏的原因

成员内部类
局部内部类
匿名内部类
静态内部类


成员内部类:
编译后,成员内部类中有指向外部类对象的引用,所以成员内部类依赖于外部类,如果没有创建外部类的对象,
则无法对this$0进行赋值,所以可以直接访问外部类的方法和成员。


局部内部类(匿名内部类):
编译后,匿名内部类的构造器中包含两个参数,指向外部类对象的引用和使用的局部变量,如果编译器能确定则确定该参数,如果不能
确定,则会在初始化内部类对象时通过构造方法传入,为保证数据一致性,所以用final修饰该局部变量


静态内部类:
不依赖外部类,不会持有外部类对象的引用。


Handler造成内存泄露的原因:
Handler属于Thread Local Storage 变量,生命周期与Activity不一致。
如果声明的Handler是普通内部类,则会引用外部activity。而ActivityThread创建UI线程时会创建一个Looper对象,Looper对象维护
一个简单的消息队列,处理里面的Message。Looper生命周期是整个应用的生命周期。
初始化Handler会与Looper的消息队列关联,Message会引用Handler对象,从而阻止了handler的回收,从而阻止了activity的回收。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值