Android 获取当前Activity

获取当前Activity最主要的作用当然是为了能随时获取Context,超多地方都需要用到它

什么是Context

源码中的注释是这么来解释Context的:Context提供了关于应用环境全局信息的接口。Context到底可以实现哪些功能呢?弹出Toast、启动Activity、启动Service、发送广播、操作数据库等等都需要用到Context


Context作用域

如何获取当前Activity

我的思路是创建一个Activity管理类,通过在Application监听所有Activity的生命周期回调来获取当前Activity。
首先创建Activity管理类(object声明相当于单例)

object ActivityManager {
    // 弱引用
    private var sCurrentActivityWeakRef: WeakReference<Activity>? = null

    fun getCurrentActivity(): Activity? = sCurrentActivityWeakRef?.get()

    fun setCurrentActivity(activity: Activity) {
        sCurrentActivityWeakRef = WeakReference(activity)
    }
}

创建自己的Application,并监听所有Activity的生命周期回调。
P:这里的Application也是用的单例模式,可以通过WeatherApplication.getInstance()来获取Application

class WeatherApplication : Application() {
    // 单例
    companion object {
        fun getInstance(): WeatherApplication = Inner.instance
    }

    private object Inner {
        lateinit var instance: WeatherApplication
    }

    override fun onCreate() {
        super.onCreate()
        Inner.instance = this

        // 监听所有Activity的生命周期回调
        registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
            override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
            }

            override fun onActivityStarted(activity: Activity) {
            }

            override fun onActivityResumed(activity: Activity) {
                // 在此处设置当前的Activity
                ActivityManager.setCurrentActivity(activity)
            }

            override fun onActivityPaused(activity: Activity) {
            }

            override fun onActivityStopped(activity: Activity) {
            }

            override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
            }

            override fun onActivityDestroyed(activity: Activity) {
            }
        })

    }
}

别忘了在AndroidManifest.xml中注册Application

android:name=".WeatherApplication"

现在通过ActivityManager.getCurrentActivity()就能在代码任意地方获取当前的Activity了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容