一、全局获取Context
主要是利用application获取唯一的全局实例context,使得我们在任何场景都可以获取context
举个栗子
class MyApplication : Application() {
companion object{
@SuppressLint("StaticFieldLeak")
lateinit var context: Context
//这里由于是全局唯一的实例,不会发生内存泄漏的问题,故可以放心加上注解
}
override fun onCreate() {
super.onCreate()
context = applicationContext
}
}
//这里其实也可以添加你想要全局获取的变量或者其他的全局唯一的
二、使用Intent传递对象
1.Serializable
采取序列化的方式传递对象,不过对象传递过去是一个新的对象与旧的对象拥有一样的数据
class Person:Serializable {
var name = ""
var age = 0
}
//就实现了一个接口是不是非常简单
//传递就比较简单了不举例了
//在另一个activity里面的接收数据稍微不一样
val person = intent.getSerializableExtra("person_data") as Person
2.Parcelable
其工作原理是将对象进行分解,效率上比Serializable高,不过代码方面相对而言比较复杂
不过幸好kotlin将其封装成比较简单的方式
@Parcelize
class Person(var name:String ,var age:Int):Parcelable
//这里需要注意的是数据必须封装在主构造函数中才可以
//调用的时候有点不同,主要是内部封装和kotlin的空指针检查机制
val person = intent.getSerializableExtra("person_data") as Person?
三、定制日志工具
主要应用背景是当一个庞大的工程打印了大量的日志,有些日志是不需要在应用上线时打印出来的,但单纯靠删除代码或者其他方式
都不是一个明智的选择,可能以后会再用到,所以封装一个日志控制工具是非常有必要的,举个栗子即可
object LogUtil {
private const val VERBOSE = 1
private const val DEBUG = 2
private const val INFO = 3
private const val WARN = 4
private const val ERROR = 5
private var level = ERROR
fun v(tag:String,msg:String){
if (level <= VERBOSE){
Log.v(tag,msg)
}
}
fun d(tag: String,msg: String){
if (level <= DEBUG){
Log.d(tag, msg)
}
}
fun i(tag: String,msg: String){
if (level <= INFO){
Log.i(tag, msg)
}
}
fun w(tag: String,msg: String){
if (level <= WARN){
Log.w(tag, msg)
}
}
fun e(tag: String,msg: String){
if (level <= ERROR){
Log.e(tag, msg)
}
}
}
//当你需要控制日志输出时改一下level即可
//代码基本上都比较简单
//使用日志的方法和以前基本相同
LogUtil.d("dd","ddd")
四、深色主题
这个应该是近几年才开始比较流行的,以前都是单调的浅色主题,其实Google对于此方面的支持还是比较好的
基本上新建项目都会帮你创建好,而且最主要是Android 10.0是支持自动将app的主题替换成深色主题的功能的
可能是考虑到低版本没有这种功能,有些软件内部自带深色主题
为了兼容低版本,深色主题需要考虑系统的差异性编程,这部分可以开发到了再看
不是非常难,这里有一个判断是否为深色主题的方法
fun isDarkTheme(context: Context):Boolean{
val flag = context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
return flag == Configuration.UI_MODE_NIGHT_YES
}
这边当时遇到一些小问题
意思就是差异化编程的话,你代码那边两边需要一致,不能主题差异太大🤣🤣🤣
五、Kotlin:java一键转kotlin
Android Studio真的就需要一个按钮就可以转化了,不过由于转化只是通过简单的语法变化规律转化
所以我们在转化后还需要手动进行一些优化,不过已经减轻很多负担了。这个也不举例了
至此全部kotlin以及android的基本知识已经学完了,下一次博客就是最终检验学习成果的实战