如何在Expo包的ReactActivityLifecycleListener中获取当前Activity?
Expo模块后台接收Intent问题解决思路
我正在开发一个利用Intents接收其他应用内容的Expo模块,目前遇到的问题是应用在后台运行时,分享Intent无法生效。要解决这个问题,需要监听Android生命周期,核心逻辑是在onNewIntent中获取当前Activity并更新Intent,目标代码逻辑如下:
protected void onNewIntent(Intent intent) { Activity mActivity = getCurrentActivity(); if(mActivity == null) { return; } mActivity.setIntent(intent); }
但在Expo包的MyLibReactActivityLifecycleListener.kt中,需要通过以下方式获取并维护当前Activity的引用:
完整实现代码
android/src/main/java/expo/modules/mylib/MyLibReactActivityLifecycleListener.kt package expo.modules.mylib import android.app.Activity import android.content.Intent import android.os.Bundle import expo.modules.core.interfaces.ReactActivityLifecycleListener class MyLibReactActivityLifecycleListener : ReactActivityLifecycleListener { private var currentActivity: Activity? = null override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { currentActivity = activity } override fun onNewIntent(intent: Intent): Boolean { currentActivity?.let { activity -> // 更新Activity的Intent,确保后续能获取到最新的分享内容 activity.setIntent(intent) // 这里可以添加解析Intent、通知JS层等自定义逻辑 return true // 返回true表示已处理该Intent } return false // 无可用Activity时返回false } override fun onActivityDestroyed(activity: Activity) { // 清空引用,避免内存泄漏 if (currentActivity === activity) { currentActivity = null } } // 实现其他必填的生命周期方法 override fun onActivityResumed(activity: Activity) {} override fun onActivityPaused(activity: Activity) {} override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {} override fun onActivityStarted(activity: Activity) {} override fun onActivityStopped(activity: Activity) {} }
关键说明
- 在
onActivityCreated中保存当前Activity的引用,确保后续能获取到有效的Activity实例 - 在
onNewIntent中使用保存的引用调用setIntent(intent),更新Activity的Intent - 在
onActivityDestroyed中清空引用,防止内存泄漏
这样就能在应用处于后台时,正确捕获onNewIntent事件并更新Intent,保证分享内容能被正常处理。
内容的提问来源于stack exchange,提问作者hkropp
相关产品推荐
相关产品推荐

