如何在 React Native 中正确使用 redux saga 和后台事件?

内森·杜勒

我正在使用 react-native、redux-saga、react-native-background-task。

首先,当我的应用程序从前台转到后台时(在 IOS 和 Android 上),传奇仍在继续。我原以为它会停止,但我猜是因为传奇在另一个线程上它会继续。这是否会导致电池管理问题或阻止 IOS 允许应用程序执行后台获取事件?

其次,当后台任务启动时,在 Android 应用程序上,我的主要 saga 像正常一样启动(不是预期的行为,我认为只有后台任务代码才能运行。在 IOS 上,只有后台任务代码按我的预期运行。为什么Android应用程序再次启动整个传奇?

第三,当我使用 xcode 来“模拟后台获取”时,它工作了一点,但现在它正在关闭任何其他打开的应用程序,而不是运行任务代码。为什么是这样?

这是我定义后台任务的地方:

BackgroundTask.define(async () => {
    const now = moment().format("HH:mm:ss");
    console.log("Executing background task at: ", now);
    console.log("Test Test Test!");
    BackgroundTask.finish();
});

这是我安排后台任务并包含 redux 的地方:

import React from 'react';
import { SafeAreaView, View, StatusBar, Alert } from 'react-native';
import { Provider } from 'react-redux';
import { redux_store } from './redux/store';
import { AppContainer } from './helpers/navigation.js';
import { styles } from './styles/styles.js';
import ReduxRootConnection from './components/reduxRoot';
import { aws_configure } from './helpers/aws-configure';
import BackgroundTask from 'react-native-background-task'

aws_configure();

import { initPushNotifications } from './helpers/initPN';

export default class App extends React.Component {

    componentDidMount() {
        // TODO: add this back in
        // initPushNotifications()

        BackgroundTask.schedule();
        this.check_background_task_status();
    }

    async check_background_task_status() {
        const status = await BackgroundTask.statusAsync();
        console.log("BackgroundTask Status: ", status);
    }

    render() {
        return (
            <Provider store={redux_store}>
                <View style={{flex: 1}}>
                    <SafeAreaView style={styles.mainAppContainerStyle}>
                        <ReduxRootConnection>
                            <AppContainer/>
                        </ReduxRootConnection>
                    </SafeAreaView>
                </View>
            </Provider>
        );
    }
}
蓝色的

当本机应用程序在 android 上运行时,并不意味着 Activity 一定会被销毁,因此您的 js 代码可能会继续运行不确定的时间。最终,如果用户不再打开它,您的活动很可能会停止,但您不知道确切时间。您可以使用 react native AppState( https://facebook.github.io/react-native/docs/appstate ) 来取消您希望在应用程序进入后台时取消的传奇。

对于后台任务问题,BackgroundTask 在 android 上的实现使用 react native 的 headless js ( https://facebook.github.io/react-native/docs/headless-js-android.html ),它在后台启动您的整个应用程序. 在 ios 上没有 headless js,所以实现是不同的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在React-Native导航中正确使用Redux

来自分类Dev

如何使用 React、Redux 和 Redux-Saga 实现乐观状态更新/推送

来自分类Dev

React Native 中的 Redux-Saga 错误

来自分类Dev

如何在 React Native 中正确调试?

来自分类Dev

React Navigation V5 + Redux Saga:如何从Saga导航?

来自分类常见问题

如何在React Native中正确对齐文本输入?

来自分类Dev

如何在Redux中正确清理和重写数组

来自分类Dev

如何使用Redux-Saga传递参数

来自分类Dev

如何在React Native中正确使用仅iOS组件而不会在Android中出现错误

来自分类Dev

如何在React Native中正确使用仅iOS组件而不会在Android中出现错误

来自分类Dev

如何在安装React组件之前让Saga观看事件?

来自分类Dev

如何在python中正确使用'or'和'and'

来自分类Dev

如何使用 Redux 正确绑定 React onClick 事件?

来自分类Dev

什么时候使用redux saga和redux thunk?

来自分类Dev

如何在react中正确使用react-error-boundary?

来自分类Dev

如何在不使用redux的情况下使用redux saga?

来自分类Dev

如何在 react-native 和 Redux 中获取动作创建者的全局状态?

来自分类Dev

如何在条件和Redux中使用React路由?

来自分类Dev

如何在 React JS 中使用 Redux 和 Axios?

来自分类Dev

如何在 gulp 中正确包含 requirejs 和 react & JSX

来自分类Dev

您将如何使用Redux和Immutablejs实现React Native的NavigationExperimental?

来自分类Dev

如何在React / Redux应用程序中正确管理表单

来自分类Dev

如何在React Native / Redux中使用推送路由为NavigationStateUtils创建唯一键?

来自分类Dev

什么是Redux循环以及如何在React Native中使用它

来自分类Dev

使用react native和redux实现FB登录

来自分类Dev

使用 react native 和 redux 进行异步调用,thunk

来自分类Dev

如何在React Router中正确使用IndexRoute?

来自分类Dev

如何在React中正确使用Onsen的Navigator?

来自分类Dev

如何在React与TypeScript中正确使用useState钩子?

Related 相关文章

  1. 1

    如何在React-Native导航中正确使用Redux

  2. 2

    如何使用 React、Redux 和 Redux-Saga 实现乐观状态更新/推送

  3. 3

    React Native 中的 Redux-Saga 错误

  4. 4

    如何在 React Native 中正确调试?

  5. 5

    React Navigation V5 + Redux Saga:如何从Saga导航?

  6. 6

    如何在React Native中正确对齐文本输入?

  7. 7

    如何在Redux中正确清理和重写数组

  8. 8

    如何使用Redux-Saga传递参数

  9. 9

    如何在React Native中正确使用仅iOS组件而不会在Android中出现错误

  10. 10

    如何在React Native中正确使用仅iOS组件而不会在Android中出现错误

  11. 11

    如何在安装React组件之前让Saga观看事件?

  12. 12

    如何在python中正确使用'or'和'and'

  13. 13

    如何使用 Redux 正确绑定 React onClick 事件?

  14. 14

    什么时候使用redux saga和redux thunk?

  15. 15

    如何在react中正确使用react-error-boundary?

  16. 16

    如何在不使用redux的情况下使用redux saga?

  17. 17

    如何在 react-native 和 Redux 中获取动作创建者的全局状态?

  18. 18

    如何在条件和Redux中使用React路由?

  19. 19

    如何在 React JS 中使用 Redux 和 Axios?

  20. 20

    如何在 gulp 中正确包含 requirejs 和 react & JSX

  21. 21

    您将如何使用Redux和Immutablejs实现React Native的NavigationExperimental?

  22. 22

    如何在React / Redux应用程序中正确管理表单

  23. 23

    如何在React Native / Redux中使用推送路由为NavigationStateUtils创建唯一键?

  24. 24

    什么是Redux循环以及如何在React Native中使用它

  25. 25

    使用react native和redux实现FB登录

  26. 26

    使用 react native 和 redux 进行异步调用,thunk

  27. 27

    如何在React Router中正确使用IndexRoute?

  28. 28

    如何在React中正确使用Onsen的Navigator?

  29. 29

    如何在React与TypeScript中正确使用useState钩子?

热门标签

归档