由于本章多为用法,我只总结了一些理论知识——各个组件的用途
Android为我们提供了一个Application类,每当应用程序启动的时候,系统就会自动将该类初始化,我们就可以定制自己的Application类,以便于管理程序内一些全局的状态信息,如Context
class MyApplication : Application(){
companion object{
lateinit var context : Context
}
override fun onCreate(){
super.onCreate()
context = applicationContext
}
}
注意,一般来说是不能将Context设置成静态变量的,这会导致Activity无法正常销毁,从而引起内存泄漏。但这里我们获取的不是Activity或Service中的Context,而是Application中的Context,它全局只会存在一份实例,而且在整个应用程序的生命周期内都不会被回收,因此不存在内存泄漏的风险。
Serializable 表示将一个对象转换成可存储或可传输的状态,实现起来很简单,只需让传递的类实现Serializable接口即可。
Serializable的工作原理是将一个对象序列化为可存储或可传输的状态,传递给另外一个Activity后再将其反序列化成一个新的对象。
注意,这里对象只是存储数据相同,实际上并不是同一个对象。
特点:实现简单,但由于会对整个对象序列化,效率较差
Parcelable的实现原理是将完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型。
即,将要保存的对象拆解,到目的地后再组装起来。
要点是读取顺序要和写出顺序保持一致。
在Kotlin中,如果传递的数据都封装在对象的主构造函数中,还可以直接使用@Parcelable注解,而不再一一实现方法。
特点:实现较为复杂,但效率较高
设置一个单例类,对Log进行封装,设置level变量,控制该变量以达到阻止日志打印的目的
正常运行程序,进行到要开始调试的位置,点击按钮,选择进程调试
深色模式既可以让用户眼部在夜间使用时更加舒适,还可以剑神电量消耗,延长手机续航。
通过指定styles中的android:forceDarkAllowed属性为true实现深色模式,简单粗暴,效果不好
通过指定styles中parent的属性为DayNight模式,以达到深浅模式自动转换的功能。简单粗暴,效果一般。
针对整个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
}
本文地址:https://blog.csdn.net/qq_45254908/article/details/107572202
如对本文有疑问, 点击进行留言回复!!
android -- ndk (stack corruption detected)
Android Span富文本图文混排 - ImageSpan(图文垂直居中)
Element DateTimePicker日期时间选择器的使用示例
【Appium踩坑】小米手机,启动报错:exited with code 255 writing to settings requires:android.permission.WRITE_SECUR
android 拍照 预览图与 照片分辨率(可视区域)不一致
[PAT顶级]1025 Keep at Most 100 Characters (35分)
网友评论