zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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"//加这一句