React-Native сбрасывает мое приложение, когда оно в фоновом режиме - PullRequest
0 голосов
/ 06 апреля 2020

Я разрабатываю Pomodoro Timer в React-Native.

На переднем плане: пользовательский интерфейс отслеживает оставшееся время, вычитая дату прибытия минус текущую дату . Кроме того, он отслеживает завершенные циклы. (техника Pomodoro утверждает, что каждые 4 цикла происходит длительный перерыв). cycles, finish_date и time_remaining используются как state переменные (я использую hooks) для правильного обновления DOM (и для некоторых логик c тоже).

В фоновом режиме: установлен будильник для уведомления пользователя об истечении времени (react-native-alarm-notification).

Если приложение все время остается на переднем плане, оно работает точно так же, как Но если между тем я использую другие приложения или просто помещаю свое приложение в фоновый режим, в большинстве случаев приложение сбрасывается, поэтому я теряю весь прогресс. Я полагаю, что операционная система в большинстве случаев сбрасывает приложение, когда оно находится в фоновом режиме.

Так что оно может уведомлять, когда время истекло, Но в части пользовательского интерфейса это похоже на приложение было запущено в первый раз (но на самом деле оно переходило только из фонового режима на передний план). В основном его состояние возвращается к значению по умолчанию.

Я изо всех сил пытаюсь найти решение этой проблемы.

PS Я сделал несколько тестов, фактически Android убивает приложение в двух сценариях ios: 1 - если оно остается в фоновом режиме в течение нескольких минут 2 - если запущены тяжелые приложения. Я думаю, что обе проблемы связаны с памятью, я пытался установить характеристики батареи "не оптимизирован", но это не помогло.

1 Ответ

0 голосов
/ 06 апреля 2020

Если вы используете реагирующую навигацию, попробуйте использовать это:

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
    }
  ]
})

В соответствии с этой проблемой, код должен свести ваше приложение к минимуму вместо того, чтобы убивать процесс.

Или, если вы не используете реагирующую навигацию, попробуйте использовать реагировать-минимизировать , как показано ниже:

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')
  }

  [...]

}
...