【问题标题】:React-Native resets my app when it is in backgroundReact-Native 在后台重置我的应用程序
【发布时间】:2020-07-18 16:33:27
【问题描述】:

我正在React-Native 中开发一个Pomodoro Timer

在前台: 用户界面通过减去到达日期减去当前日期来跟踪剩余时间。 此外,它还跟踪已完成的周期。 (Pomodoro 技术声明每 4 个周期有一个长时间的休息)。 cyclesfinish_datetime_remaining 用作 state 变量(我确实使用 hooks)以便正确更新 DOM(以及一些逻辑)。

在后台: 设置了警报以在时间到时通知用户 (react-native-alarm-notification)。

如果应用程序一直处于前台,它的工作方式与应有的完全一样。但如果同时我确实使用其他应用程序,或者如果我只是将我的应用程序置于后台,大部分应用程序重置的时间,所以我失去了所有的进展。 我猜操作系统在大多数情况下会在应用程序处于后台模式时重置它。

所以它可能会在时间到时通知,但在 UI 部分,就像是第一次启动应用程序(但实际上,它只是从后台模式到前台)。 基本上它的状态会恢复到默认状态。

我正在努力寻找解决方案。

PS我做了一些测试,实际上 Android 在两种情况下会杀死应用程序:1 - 如果它在后台停留几分钟 2 - 如果有大量应用程序正在运行.我猜这两个问题都与内存有关,我尝试将电池性能设置为“未优化”,但没有帮助。

【问题讨论】:

    标签: android react-native timer background reset


    【解决方案1】:

    如果您使用 react-navigation,请尝试使用:

    Navigation.startTabBasedApp({
      tabs: [
        {
          label: 'Navigation',
          screen: 'example.Types',
          icon: require('../img/list.png'),
          title: 'Navigation Types',
          overrideBackPress: true
        }, {
          label: 'Actions',
          screen: 'example.Actions',
          icon: require('../img/swap.png'),
          title: 'Navigation Actions',
          overrideBackPress: true //here the magic happens
        }
      ]
    })
    

    根据this 问题,代码应该使您的应用最小化而不是终止进程。

    或者,如果您不使用 react-navigation,请尝试使用 react-native-minimize,如下所示:

    npm install --save react-native-minimize
    react-native link react-native-minimize
    

    然后:

    import React from "react";
    import {BackHandler} from "react-native";
    import RNMinimizeApp from 'react-native-minimize';
    
    [...]
    
    ComponentWillMount(){
      BackHandler.addEventListener('hardwareBackPress', function() {
        RNMinimizeApp.minimizeApp();
      });
    
      componentWillUnmount() {
        BackHandler.removeEventListener('hardwareBackPress')
      }
    
      [...]
    
    }
    

    【讨论】:

    • 感谢您的回答。我没有通过后退按钮退出应用程序,我禁用了它。要退出应用程序,我使用中心按钮,并将其置于前台,我使用 Android 的进程选项卡。事实是,有时它会在后台运行,但大多数时候它不会。我应该将 RNMinimizeApp 绑定到 AppState 事件吗?
    • @MatteoVeraldi 在我的应用程序中,我使用 StartForeground() 和 java,而不是 react-native,它工作得很好,你已经试过了吗?可悲的是,它会创建一个正在运行的通知。我做的另一件事是使用 AppState 事件来定义当应用程序来自背景时要引导的路线。我不知道这是否可行,但您可以尝试让 react-native-minimize 在应用程序进入后台状态时运行。希望它有效
    • 谢谢,我要去读一下StartForeground()。顺便说一句,我做了一些测试,实际上 Android 在两种情况下会杀死我的应用程序: 1- 如果它在后台停留几分钟; 2-如果运行繁重的应用程序以节省内存;我需要为第一个场景找到解决方案。我希望StartForeground 会有所帮助。
    • 另外,检查是否与您的 android 版本相关。前段时间我遇到问题,我的应用在接到电话时无法在锁屏上运行。原来是android阻止了它的权限,并且没有修复。
    • 你找到你想要的答案了吗?如果你有,你能把它们贴在这里吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2021-01-14
    • 2017-03-22
    • 1970-01-01
    相关资源
    最近更新 更多