什么是Context

源码 2024-9-3 21:18:04 88 0 来自 中国
获取当前Activity最告急的作用固然是为了能随时获取Context
什么是Context

源码中的注释是这么来表明Context的:Context提供了关于应用情况全局信息的接口。Context到底可以实现哪些功能呢?弹出Toast、启动Activity、启动Service、发送广播、操作数据库等等都必要用到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的生命周期回调,并在androidmanifest.xml中注册
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) {            }        })    }}通过ActivityManager.getCurrentActivity()获取栈顶(当前)Activity
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 18:22, Processed in 0.157995 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表