去年的谷歌IO大会上,谷歌宣布将Kotlin作为安卓的官方开发语言,Kotlin开始跨入码农的视野,人们开始学习Kotlin,用来代替Java实现更灵活的开发。Kotlin更便捷先进的语法比之于苹果IOS平台,有称之为安卓的Swift语言。在本文中,虫虫会介绍一些在安卓开发中可能用到的技巧(代码),帮你优化代码,让代码更简洁、明了,易于维护。
记录日志更优雅
在安卓中如果要添加日志日志,通常是下面这样的写法
上述代码,首先声明一个TAG,它只是现有类的类名。写法比较凌乱,不好看清楚。
通过在Kotlin添加优化扩展,更优雅的写法是:
该写法更易使用,更易读。不需要显式声明TAG变量(默认情况下,TAG为类名,比如本例的MainActivity)。如果要个性化TAG,可以自主指定:(
logInfo("doSomething execution started, "CClog_TAG")
为了支持以上写法,你只需给Kotlin添加扩展代码:
共享引用优化
通常在安卓中,如果你想在应用启动期间保留一些小数据,可以使用下面的共享引用(SharedPreferences):
但是,你还需要给每一个这样的数据类notificationCounter,clickCounter 等等编写2个新方法(get和set),还要将密钥存储在新的常量文件中。优化的写法:
在码农界的共识是不必在Constants文件中声明任何更多方法或任何key。而用变通方法(使用的方法),上述变量则由共享引用支持。 默认key键由snake case转换的变量名(上面代码中的SHP_Notification_Count,SHP是静态前缀)。如果你想要明确的key的使用:
var notificationCount: IntbyDelegateSharedPref("My_Key",0)
要实现该效果,复制如下代码段到你项目中:
场景转化和动画延迟
我们在安卓中做的最常见的事情是让视图转化,让其消失,然后变为可见(主要是缩放动画)。此外,在某些情况下,我们希望对开场动画做延迟处理,例如2秒后才展示。则可以用apply函数。其语法大概如下:
anyView.setGone() // 场景不显示
anyView.setGone(true) // 场景动画默认不显示
anyView.setGone(true, ViewAnimationProperties().apply { startDelayMillis = 2000 }) // 延迟动画2s
anyView?.setVisible(true, ViewAnimationProperties().apply { startDelayMillis = 2000; durationMills = 3000}) //开始延迟2ms,播放间隔延迟3s
anyView.setGone()//将在没有动画的情况下消失
anyView.setGone(true)//使用默认缩放动画使视图消失
anyView.setGone(true,ViewAnimationProperties()。apply )//使用startDelay为2秒使视图消失
anyView?.setVisible(true,ViewAnimationProperties()。apply )//开始延迟加上持续时间
将以下代码添加到项目中:
内部数据传输
在Kotlin中开始Activity的一般方法是如下代码:
val intent = Intent(context, MainActivity::class.java)
intent.putExtra("first_key", "firstValue")
intent.putExtra("second_key", 2)
intent.putExtra("third_key", 3.0f)
context.startActivity(intent)
使用代码扩展,写法将如下:
startActivityWithData( "first_key" to "firstValue" , "second_key" to 2 , "third_key" to 3.0f)
startActivityWithData()
非常简易直白。我们使用Inline和Reified类型扩展了这种效果。
下面是实现代码:
Kotlin提供了更灵活的语法和功能,如果我们善用这些特性可以优化我们的开发,让我们的代码更加优雅直白,易于使用易于排查。虫虫在此抛出该文,以馈大家。
本文所有例子和代码,如有需要请关注虫虫,向虫虫所求。如果你有更好的想法和代码,也可以回复留言。
领取专属 10元无门槛券
私享最新 技术干货