Android 原生插件内注册 application 生命周期钩子

使用场景

  • 某些 sdk 可能要求初始化必须在Application.onCreate函数中主线程内调用
  • 可能需要通过registerActivityLifecycleCallbacks监听应用前后台切换

配置准备

  • debugSaaAVersion 要更新到 1.0.7及以上版本 (对应最小Android Sdk Version 为 1.3.28

开发流程

1.继承NativePluginApplicationInterface

参考下面代码

package com.donut.xxx

import android.app.Activity
import android.app.Application
import android.os.Bundle
import com.tencent.luggage.wxa.SaaA.plugin.NativePluginApplicationInterface


class TestNativePluginApplication: NativePluginApplicationInterface {
    private val TAG = "TestNativePluginApplication"

    override fun getPluginID(): String {
        android.util.Log.e(TAG, "getPluginID")
        return BuildConfig.PLUGIN_ID
    }

    override fun onCreate(application: Application) {
        android.util.Log.e(TAG, "oncreate!")
        application.registerActivityLifecycleCallbacks(object: Application.ActivityLifecycleCallbacks {
            override fun onActivityCreated(p0: Activity, p1: Bundle?) {
                android.util.Log.e(TAG, "onActivityCreated")
            }

            override fun onActivityStarted(p0: Activity) {
                android.util.Log.e(TAG, "onActivityStarted")
            }

            override fun onActivityResumed(p0: Activity) {
                android.util.Log.e(TAG, "onActivityResumed")
            }

            override fun onActivityPaused(p0: Activity) {
                android.util.Log.e(TAG, "onActivityPaused")
            }

            override fun onActivityStopped(p0: Activity) {
                android.util.Log.e(TAG, "onActivityStopped")
            }

            override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {
                android.util.Log.e(TAG, "onActivitySaveInstanceState")
            }

            override fun onActivityDestroyed(p0: Activity) {
                android.util.Log.e(TAG, "onActivityDestroyed")
            }
        })
    }

}

2.配置接口实现类

plugin/src/main/resources/META-INF/services/目录下新建文件com.tencent.luggage.wxa.SaaA.plugin.NativePluginApplicationInterface

文件内容配置NativePluginApplicationInterface接口实现类的路径,如下图所示

3.开始测试

  • 查看DemoApplication文件(/app/src/main/java/com/tencent/weauth/DemoApplication.kt)
  • 确认 onCreate 函数里 是否执行api.runWhenApplicationOnCreate
  • 如果没有这段代码,可手动补一下
    override fun onCreate() {
        super.onCreate()
        try {
            val api = SaaAApi.Factory.getApi()
            if (api != null) {
                // 如果您的插件需要使用 application 生命周期钩子,请把以下注释打开且保证 debugSaaAVersion >= 1.0.7
                 api.runWhenApplicationOnCreate(this)
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

4.构建插件上传后在云构建时使用

参考 Android 原生插件开发指引的上传章节即可