You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android平台React Native应用进入多任务视图的事件捕获

React Native 捕获最近任务按钮事件与应用销毁前事件

一、捕获按下“最近任务”按钮进入后台概览的事件

按下“最近任务”按钮本质是将应用从前台切换到后台,React Native 自带的AppState API 可以监听这个状态变化:

  • 当应用状态从active(前台活跃)变为background(后台)时,即可触发对应逻辑。不过这个事件无法区分是通过Home键还是最近任务按钮触发的后台切换,只能识别状态变更。
  • 代码示例:
import { AppState, useEffect } from 'react-native';

function App() {
  useEffect(() => {
    const handleAppStateChange = (nextState) => {
      if (nextState === 'background') {
        // 处理进入后台概览的逻辑
        console.log('应用进入后台概览界面');
      }
    };

    AppState.addEventListener('change', handleAppStateChange);

    // 组件卸载时移除监听
    return () => {
      AppState.removeEventListener('change', handleAppStateChange);
    };
  }, []);

  return (
    // 你的应用组件
  );
}

二、应用被销毁前的事件捕获

React Native 层面没有提供直接的“销毁前”回调,因为 iOS 和 Android 的应用销毁机制存在差异,且系统可能在无通知的情况下直接终止进程:

iOS 端

  • 当应用在后台被系统终止或用户从后台概览滑动删除时,原生AppDelegate中的applicationWillTerminate:方法会触发(仅后台终止场景有效,前台被杀死不触发)。你需要通过原生代码扩展,将这个事件传递给 RN 端:
    1. 在AppDelegate.m中添加逻辑:
    - (void)applicationWillTerminate:(UIApplication *)application {
      // 发送事件给RN
      [[NSNotificationCenter defaultCenter] postNotificationName:@"AppWillTerminate" object:nil];
    }
    
    1. 在 RN 端通过NativeEventEmitter监听:
    import { NativeEventEmitter, NativeModules } from 'react-native';
    
    const eventEmitter = new NativeEventEmitter(NativeModules.NotificationCenter);
    
    useEffect(() => {
      const subscription = eventEmitter.addListener('AppWillTerminate', () => {
        console.log('应用即将被销毁(iOS)');
        // 执行收尾逻辑
      });
    
      return () => {
        subscription.remove();
      };
    }, []);
    

Android 端

  • 应用被销毁时,原生Activity的onDestroy方法会触发。同样需要通过自定义原生模块将事件传递给 RN:
    1. 创建自定义原生模块,在onHostDestroy中发送事件:
    public class AppModule extends ReactContextBaseJavaModule {
      public AppModule(ReactApplicationContext reactContext) {
        super(reactContext);
      }
    
      @Override
      public String getName() {
        return "AppModule";
      }
    
      @Override
      public void onHostDestroy() {
        super.onHostDestroy();
        // 发送事件给RN
        getReactApplicationContext()
          .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
          .emit("AppWillDestroy", null);
      }
    }
    
    1. 在 RN 端监听事件:
    import { NativeEventEmitter, NativeModules } from 'react-native';
    
    const { AppModule } = NativeModules;
    const eventEmitter = new NativeEventEmitter(AppModule);
    
    useEffect(() => {
      const subscription = eventEmitter.addListener('AppWillDestroy', () => {
        console.log('应用即将被销毁(Android)');
        // 执行收尾逻辑
      });
    
      return () => {
        subscription.remove();
      };
    }, []);
    

关键注意事项

无论 iOS 还是 Android,系统都可能在极端情况下(如内存严重不足)直接杀死应用进程,不会触发任何销毁前事件。因此不要依赖这类事件处理关键数据持久化,建议在数据变更时即时保存。

内容的提问来源于stack exchange,提问作者Olly Rennard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:15:15