一些Android学习笔记

读研期间自学Android开发的一些总结

提示:本系列文章处于动态更新当中; 文章内容没有进行整理, 每一小节可以视为一个知识点, 相邻知识点之间不保证产生关联; 由于本人是通过网络渠道自学的Android, 一些原理的解释和代码仅代表我个人观点.



1、解决使用Handler时产生的内存泄露问题.

最常见的使用Handler的例子:

    private val handler: Handler = object : Handler() {
        
    }

这样写会收到系统的警告:
This Handler class should be static or leaks might occur (anonymous android.os.Handler)
如果想规避警告, 可改写为:

    private val handler: Handler = object : Handler(Looper.myLooper()!!) {

    }

这样写带来的后果是, 当你的程序运行时, 会带来内存泄漏的风险, 因为handler会默认持有外部类的引用, 如果你是在Activity中这样使用handler, 将会导致该Activity无法被回收.
解决办法: 使用弱引用WeakReference:

    private val handler = MyHandler(this)
    private inner class MyHandler(_context: Context) : Handler(Looper.myLooper()!!) {
        private val mContext: WeakReference<Context> = WeakReference(_context)

        override fun handleMessage(msg: Message) {
            if (this.mContext.get() != null) {
                // 这里是消息处理代码
            }
        }
    }

这样你再使用该handler时不会出现父引用被一直持有的问题.

2、基于ValueAnimator实现的按钮点击动态效果.

样例效果是点击按钮后, 按钮先缩小再逐渐恢复原本大小, 代码如下:

        val button: Button = Button(this)
        val anim: ValueAnimator = ValueAnimator.ofFloat(1.00F, 0.80F, 1.00F).apply {
            duration = 1000L // 动画持续时间
            repeatCount = 1 // 重复次数, 注意这里写的1实际上动画会播放两次, 即在原本播放一次的基础上额外播放的次数
            interpolator = LinearInterpolator() // 水很深
            addUpdateListener {
                // 动画效果
                button.scaleX = it.animatedValue as Float
                button.scaleY = it.animatedValue as Float
            }
        }
        button.setOnClickListener {
            anim.start()
        }

3、很简单的导入aar文件的方法.

在Android2022.1.1 Patch 2版本中, 创建Android 7.0及以上项目均可行.
将需要的aar文件复制到Android项目的libs文件夹下, 在模块的build.gradle文件的dependencies条目下加入:
implementation fileTree(“libs”)
修改工程的gradle.properties文件,在最后添加:
android.enableJetifier=true

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值