欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

温习Android基础知识——《第一行代码(第三版)》读书笔记 Chapter 14 高级技巧

程序员文章站 2022-04-01 12:20:41
第十四章:继续进阶,你还应该掌握的高级技巧由于本章多为用法,我只总结了一些理论知识——各个组件的用途目录第十四章:继续进阶,你还应该掌握的高级技巧全局获取Context的技巧使用Intent传递对象Serializable 序列化Parcelable 包裹化定制自己的Log调试Android程序传统调试——添加断点使用Attach Debugger to Android Process深色模式ForceDarkDayNight主题主题差异性编程建议:判断当前是否是深色主题全局获取Context的技...

第十四章:继续进阶,你还应该掌握的高级技巧

由于本章多为用法,我只总结了一些理论知识——各个组件的用途

全局获取Context的技巧

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,它全局只会存在一份实例,而且在整个应用程序的生命周期内都不会被回收,因此不存在内存泄漏的风险。

使用Intent传递对象

Serializable 序列化

Serializable 表示将一个对象转换成可存储或可传输的状态,实现起来很简单,只需让传递的类实现Serializable接口即可。
Serializable的工作原理是将一个对象序列化为可存储或可传输的状态,传递给另外一个Activity后再将其反序列化成一个新的对象。
注意,这里对象只是存储数据相同,实际上并不是同一个对象。
特点:实现简单,但由于会对整个对象序列化,效率较差

Parcelable 包裹化

Parcelable的实现原理是将完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型。
即,将要保存的对象拆解,到目的地后再组装起来。
要点是读取顺序要和写出顺序保持一致。
在Kotlin中,如果传递的数据都封装在对象的主构造函数中,还可以直接使用@Parcelable注解,而不再一一实现方法。
特点:实现较为复杂,但效率较高

定制自己的Log

设置一个单例类,对Log进行封装,设置level变量,控制该变量以达到阻止日志打印的目的

调试Android程序

传统调试——添加断点

使用Attach Debugger to Android Process

正常运行程序,进行到要开始调试的位置,点击按钮,选择进程调试

深色模式

深色模式既可以让用户眼部在夜间使用时更加舒适,还可以剑神电量消耗,延长手机续航。

ForceDark

通过指定styles中的android:forceDarkAllowed属性为true实现深色模式,简单粗暴,效果不好

DayNight主题

通过指定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

相关标签: 安卓基础知识