高级技巧Kotlin
全局获取Context的技巧
1 | class MyApplication : Application() { |
1 | <application |
1 | Toast.makeText(MyApplication.context, "onCreate", Toast.LENGTH_SHORT).show() |
Intent传递对象
Serializable方式
特点:
Serializable是 Java 提供的一个接口,它标志着一个类可以被序列化用法:
1
2
3
4
5
6
7
8
9
10
11// 定义一个可以序列化的对象
data class User(val name: String, val age: Int) : Serializable
// 在第一个Activity中传递对象
val user = User("John", 30)
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("user_data", user)
startActivity(intent)
// 在第二个Activity中接收对象
val user = intent.getSerializableExtra("user_data") as User
Parcelable方式
特点:
Parcelable是 Android 提供的一种对象序列化机制,它与Serializable类似,目的是将对象转换为可以通过Intent或Bundle等传递的字节流,但它的实现更加高效。与 Java 标准的Serializable相比,Parcelable更加高效,因为它不会依赖于反射,使用了特定的内存块和优化的序列化方式。用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35// 定义一个实现 Parcelable 的对象
data class User() : Parcelable {
val name=""
val age=0
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(name)//写出name
parcel.writeInt(age)//写出age
}
override fun describeContents(): Int = 0
companion object CREATOR: Parcelable.Creator<User>{
override fun createFromParcel(parcel: Parcel): User {
val user = User()
user.name=parcel.readString()?:""//读取name
user.age=parcel.readInt()//读取age
return user
}
override fun newArray(size: Int): Array<User?> {
return arrayOfNulls(size)
}
}
}
// 在第一个Activity中传递对象
val user = User()
user.name="John"
user.age=18
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("user_data", user)
startActivity(intent)
// 在第二个Activity中接收对象
val user = intent.getParcelableExtra("user_data") as User注意:这里的读取顺序和写出的顺序一定要完全相同
更简单的方法:
1
2
class Person(var name:String,var age:Int):Parcelable
定制自己的日志工具
- 开发阶段将level指定成VERBOSE,正式上线时将其指定成ERROR
1 | object LogUtil { |
1 | LogUtil.d("TAG", "debug log") |
深色主题
1 | fun toggleTheme() { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Auroraの世界!




