Kotlin 使用registerActivityLifecycleCallbacks管理Activity的切换
Kotlin 管理 切换 Activity 使用
2023-09-14 09:14:00 时间
使用方法:自定义应用的Application,在onCreate()方法里注册“使用”
class MyApplication : Application() {
......
override fun onCreate() {
super.onCreate()
......
init()
}
private fun init(){
rigesterActivityCallbacks()
}
private fun rigesterActivityCallbacks() {
registerActivityLifecycleCallbacks(ActivityLifecycleCallbacksAdapter(
onActivityCreated = {
activity, _ ->
ActivityManager.activities.add(activity)
},
))
}
}
ActivityLifecycleCallbacksAdapter.kt
class ActivityLifecycleCallbacksAdapter(
private var onActivityCreated: ((activity: Activity, savedInstanceState: Bundle?) -> Unit)? = null
// private var onActivityStarted: ((activity: Activity) -> Unit)? = null,
// private var onActivityResumed: ((activity: Activity) -> Unit)? = null,
// private var onActivityPaused:((activity: Activity) -> Unit)? = null,
// private var onActivityStopped:((activity: Activity) -> Unit)? = null,
// private var onActivitySaveInstanceState:((activity: Activity, outState: Bundle) -> Unit)? = null,
// private var onActivityDestroyed:((activity: Activity) -> Unit)? = null
) : Application.ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
onActivityCreated?.invoke(activity, savedInstanceState)
Log.d("luoah", "[AppApplication.java] -- onActivityCreated -- activity:" + activity);
}
override fun onActivityStarted(activity: Activity) {
Log.d("luoah", "[AppApplication.java] -- onActivityStarted -- activity:" + activity);
}
override fun onActivityResumed(activity: Activity) {
Log.d("luoah", "[AppApplication.java] -- onActivityResumed -- activity:" + activity);
}
override fun onActivityPaused(activity: Activity) {
Log.d("luoah", "[AppApplication.java] -- onActivityPaused -- activity:" + activity);
}
override fun onActivityStopped(activity: Activity) {
Log.d("luoah", "[AppApplication.java] -- onActivityStopped -- activity:" + activity);
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
Log.d("luoah", "[AppApplication.java] -- onActivitySaveInstanceState -- activity:" + activity);
}
override fun onActivityDestroyed(activity: Activity) {
Log.d("luoah", "[AppApplication.java] -- onActivityDestroyed -- activity:" + activity);
}
}
这样,切换不同的Activity,MyApplication就知道应用切换了,看看下面理解:
1.开始开启MainActivity的时候,部分Logcat
luoah: [AppApplication.java] -- onActivityCreated -- activity:com.demo.test3.MainActivity@a57f719
luoah: [AppApplication.java] -- onActivityStarted -- activity:com.demo.test3.MainActivity@a57f719
luoah: [AppApplication.java] -- onActivityResumed -- activity:com.demo.test3.MainActivity@a57f719
2.从MainActivity转跳到MyListActivity,部分Logcat
luoah: [AppApplication.java] -- onActivityPaused -- activity:com.demo.test3.MainActivity@a57f719
luoah: [AppApplication.java] -- onActivityCreated -- activity:com.demo.test3.MyListActivity@711efe0
luoah: [AppApplication.java] -- onActivityStarted -- activity:com.demo.test3.MyListActivity@711efe0
luoah: [AppApplication.java] -- onActivityResumed -- activity:com.demo.test3.MyListActivity@711efe0
luoah: [AppApplication.java] -- onActivityStopped -- activity:com.demo.test3.MainActivity@a57f719
luoah: [AppApplication.java] -- onActivitySaveInstanceState -- activity:com.demo.test3.MainActivity@a57f719
3.退出MyListActivity到MainActivity,部分Logcat
luoah: [AppApplication.java] -- onActivityPaused -- activity:com.demo.test3.MyListActivity@711efe0
luoah: [AppApplication.java] -- onActivityStarted -- activity:com.demo.test3.MainActivity@a57f719
luoah: [AppApplication.java] -- onActivityResumed -- activity:com.demo.test3.MainActivity@a57f719
luoah: [AppApplication.java] -- onActivityStopped -- activity:com.demo.test3.MyListActivity@711efe0
luoah: [AppApplication.java] -- onActivityDestroyed -- activity:com.demo.test3.MyListActivity@711efe0
4.退出MyListActivity到手机主界面,部分Logcat
luoah: [AppApplication.java] -- onActivityPaused -- activity:com.demo.test3.MainActivity@a57f719
luoah: [AppApplication.java] -- onActivityStopped -- activity:com.demo.test3.MainActivity@a57f719
luoah: [AppApplication.java] -- onActivityDestroyed -- activity:com.demo.test3.MainActivity@a57f719
补充,如何自定义Application:
1.创建MyApplication继承Application
class MyApplication : Application() {
......
}
2.在AndroidManifest.xml中声明MyApplication,路经要对得上
<application
android:name="com.xxx.xxx.MyApplication"//加这一句
相关文章
- [Kotlin] Multi ways to write constuctor in Kotlin
- [Kotlin] Generic Functions
- [Kotlin] When statement
- [Kotlin] mutableList with toList
- [Kotlin] Generics basic
- Android kotlin 系列讲解(基础篇) 嵌套类、内部类和匿名内部类
- Google Guava 工具类与 Kotlin 语言的设计对比
- 【Spring Boot 开发实战】第1讲 Kotlin 的极简特性之:隐式类型与函数式编程
- 从Java 8到Kotlin的Spring Boot应用程序之旅
- 【Kotlin 协程】协程的挂起和恢复 ② ( 协程挂起 和 线程阻塞 对比 )
- 【Kotlin 协程】Flow 操作符 ② ( 末端操作符 | collect 操作符 | reduce 操作符 | single 操作符 | first 操作符 | toList 操作符 )
- android kotlin 协程(四) 协程间的通信
- Kotlin — 适用于原生