配置生命周期监听器

编辑页面

了解允许 Expo Modules API 钩入应用生命周期的机制。


For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

一些 Expo 库需要通过实现 Activity/ApplicationAppDelegate 生命周期回调来处理系统事件,例如深度链接、推送通知和配置更改。

Expo Modules API 提供了一种简单的方法来管理此类回调:

  • Android
    ApplicationLifecycleDispatcherReactActivityHandler 会将 ApplicationActivity 生命周期事件转发给已注册的监听器。模块可以通过 Package 类提供 ReactActivityLifecycleListenerApplicationLifecycleListener 实现来注册回调。
  • iOS
    ExpoAppDelegate 会将 AppDelegate 调用转发给已注册的 订阅者。模块可以提供 ExpoAppDelegateSubscriber 实现来注册 回调。

使用这些机制可以让模块注册行为,而无需你反复编辑原生入口点。

配置你的原生项目

Android

要在 Android 上集成 Application 生命周期监听器,请将你的 Application 类中的 onCreate()onConfigurationChanged() 调用转发给 ApplicationLifecycleDispatcher

iOS

要在 iOS 上集成 AppDelegate 订阅者,请在你现有的 AppDelegate 实现中将相关调用转发给 ExpoAppDelegateSubscriberManager,以便订阅者能够响应它们:

或者,如果你的 AppDelegate 还没有继承其他类,你可以通过继承 ExpoAppDelegate 来简化设置,它会自动处理转发:

注意: 并非所有可能导致重大副作用的 UIApplicationDelegate 方法都受支持。如果你需要依赖某个特定的委托,请查看 Expo 源码(ExpoAppDelegate.swift)以获取完整的转发方法列表。

测试你的集成

要测试回调是否正常工作,请安装一个依赖它们的模块。安装 expo-linking,它使用生命周期监听器来处理深度链接:

Terminal
npx expo install expo-linking

在代码中为深度链接添加一个监听器,并在打开深度链接时观察控制台:

import * as Linking from 'expo-linking'; import { useEffect } from 'react'; useEffect(() => { const listener = Linking.addEventListener('url', ({ url }) => { console.log('收到深度链接:', url); }); return listener.remove; }, []);

运行以下命令以打开指向你应用的深度链接:

Terminal
# 如果你的 app.json 中定义了 `android.package` 或 `ios.bundleIdentifier`
npx uri-scheme open com.example.app://somepath/details --android

# 如果你的 app.json 中定义了 `scheme`
npx uri-scheme open myapp://somepath/details --ios