Android进阶技巧
全局获取context
我们在许多地方都需要使用到context
,但当程序复杂起来,脱离了activity
时,我们通常需要关注是否要将context
在函数中传递,那么如何才能简化这个步骤,使得在任何地方都能获取context
呢?
Android提供了一个application
类,当应用程序启动时,会对这个类进行初始化,我们可以对这个类进行自定义,用来管理全局context
。
新建一个MyApplication
:
1 | class MyApplication : Application() { |
这里通过设置了静态变量context
获取application
的context
。系统会提示我们将context
设置成全局变量容易引发内存泄漏,但是这里时全局application的context,在整个生命周期内都不会回收,所以不会有上述问题,添加注解忽略即可:
1 | class MyApplication : Application() { |
然后在AndroidManifest.xml
里面的<application>
标签下进行指定:
1 | <application |
接下来在任何地方只需要调用MyApplication.context
即可。
使用Intent传递对象
使用Intent
时可以用来启动Activity
,Service
等,还可以提供一些附加数据。但是这些提供附加数据的类型是有限的,那么如何传递自定义对象呢?
Serializable
方式
这个方式是通过将对象进行序列化,转换成一个可存储或可传输的状态,然后传过去后再进行反序列化,比如我们新建一个Person.kt
:
1 | class Person : Serializable { //继承Serializable接口实现可序列化 |
在Activity
中进行传递:
1 | val person = Person() |
然后获取对象:
1 | val person = intent.getSerializableExtra("person_data") as Person |
这样就能实现传输了。
Parcelable
方式
Parcelable
实现方式是将对象进行分解再进行传递。
Kotlin为我们提供了简便的使用Parcelable
的方法,不用手动去拆分:
1 |
|
使用这个注解即可,然后Activity中:
1 | val person = intent.getParcelableExtra("person_data") as Person |
即可获取传递的对象了。
评论