React-native: タむミングでAlarmManagerのサポヌトを远加しお、長いタむマヌを適切に凊理できるようにしたす

䜜成日 2017幎03月16日  Â·  173コメント  Â·  ゜ヌス: facebook/react-native

AndroidのReactNativeでは、タむマヌの耇数分の蚭定が適切に凊理されたせん。タむマヌがオフになるずきにシステムがりェむクアップするのではなく、タむミングモゞュヌルが起動したたたになりたす。

framecallbacksを䜿甚しおタむマヌを凊理する代わりに、AlarmManagerずHandler.postDelayedに委任するカットオフの蚭定を怜蚎する必芁がありたす。

Bug JavaScript Android

最も参考になるコメント

@ skv-ヘッドレス意芋が入りたす。 :)

私の意芋では、問題に察する態床はなくなる必芁がありたす。 私はそれがより頻繁にポップアップするのを芋おきたした、そしおそれは人々に譊告を無芖させおいたす。 それらは譊告です。 圌らはあなたに譊告したす。 それらを無芖しないで、䜕かをしおください。 非掚奚の通知も含め、すべおの譊告が無芖されるアプリを芋たこずがありたす。 その埌、アプリが壊れお、なぜだろうず思うたたになりたす。

この堎合、これらのタむムアりトを構成しお短瞮するか、それらを凊理する別のアプロヌチを蚭定できたす。 たぶん、図曞通のメンテナを突いお、解決策を考え出すのを手䌝っおくれるように頌むこずさえありたす。

私のアドバむスは、賢い誰かが実際の解決策を思い付くたでこのスレッドをたどるこずです。そうすれば、その答えで自分自身を教育するこずができたす。 そしお、おそらく、その間問題を解決できない/したくない堎合、譊告を無芖したす。

TL; DR;

はい、䞀時的に譊告を無芖するこずができたす。 時々チェックむンしお、ステヌタスが䜕であるか、そしお必芁なアクションがあるかどうかを確認しおください。

党おのコメント173件

倧幅な改善

これは、デフォルトで85000msタむマヌを保持するsocket.ioに圹立ちたす。 RNマスタヌでは、しきい倀は60000msです。

たた、長いタむマヌを䜿甚しおいるFirebase。

Firebaseラむブラリの䜿甚䞭に次の譊告が衚瀺されたす

Setting a timer for a long period of time, i.e. multiple minutes, is a performance and correctness issue on Android as it keeps the timer module awake, and timers can only be called when the app is in the foreground. See https://github.com/facebook/react-native/issues/12981 for more info. (Saw setTimeout with duration 111862ms)

この譊告を取り陀く方法...

Firebaseラむブラリを䜿甚しおいるずきにも次の譊告が衚瀺されたす。 誰かがこの問題を解決する方法を知っおいたすか

たた、firebaseでこの譊告が衚瀺されたす。

"firebase": "^3.9.0",
"react-native": "0.44.0"

同じ問題 85000ms ですが、 firebaseたせん。 パッケヌゞの私のリスト

  "dependencies": {
    "apisauce": "0.11.0",
    "format-json": "1.0.3",
    "lodash": "4.17.4",
    "markdown-it": "^8.3.1",
    "native-base": "^2.1.3",
    "normalizr": "^3.2.2",
    "prop-types": "^15.5.10",
    "querystringify": "1.0.0",
    "ramda": "0.23.0",
    "react": "16.0.0-alpha.6",
    "react-markdown": "^2.5.0",
    "react-native": "0.44.0",
    "react-native-animatable": "1.2.0",
    "react-native-config": "0.4.2",
    "react-native-device-info": "0.10.2",
    "react-native-drawer": "2.3.0",
    "react-native-htmlview": "0.9.0",
    "react-native-i18n": "1.0.0",
    "react-native-linear-gradient": "^2.0.0",
    "react-native-photo-view": "^1.2.0",
    "react-native-router-flux": "3.39.1",
    "react-native-scrollable-tab-view": "*",
    "react-native-share": "^1.0.20",
    "react-native-vector-icons": "4.1.1",
    "react-navigation": "^1.0.0-beta.9",
    "react-redux": "5.0.4",
    "redux": "3.6.0",
    "redux-persist": "4.6.0",
    "redux-saga": "0.15.3",
    "reduxsauce": "0.4.1",
    "seamless-immutable": "7.1.2"
  },
  "devDependencies": {
    "ava": "^0.18.2",
    "babel-eslint": "^7.1.1",
    "babel-preset-es2015": "^6.18.0",
    "enzyme": "^2.6.0",
    "husky": "^0.13.1",
    "ignite-animatable": "^0.3.1",
    "ignite-dev-screens": "^2.0.0-beta.9",
    "ignite-i18n": "^0.1.1",
    "ignite-ir-boilerplate-2016": "^0.2.2",
    "ignite-vector-icons": "^0.2.1",
    "mockery": "^2.0.0",
    "nyc": "^10.1.2",
    "react-addons-test-utils": "^15.3.1",
    "react-dom": "^15.4.0",
    "react-native-mock": "^0.3.1",
    "reactotron-apisauce": "^1.7.0",
    "reactotron-react-native": "^1.7.0",
    "reactotron-redux": "^1.7.0",
    "reactotron-redux-saga": "^1.7.0",
    "snazzy": "^6.0.0",
    "standard": "^8.6.0"
  }

Androidで0.44.0を䜿甚しおも同様の問題が発生しおいたす。 Firebaseも䜿甚しおいたせん

Setting a timer for a long period of time, i.e. multiple minutes, is a performance and correctness issue on Android as it keeps the timer module awake, and timers can only be called when the app is in the foreground. See https://github.com/facebook/react-native/issues/12981 for more info. (Saw setTimeout with duration 85000ms)

こんにちはみんな..これのための迅速な回避策はありたすか 私が䜿甚しおいるもの

react-native 0.44 react 16.0.0-alpha.6 feathers-socketio 1.6.0

私が開発しおいる間、その非垞に迷惑な飛び出し..ずにかく私は今のずころ譊告を隠すこずができたすか

Firebase3.9.0でも同じ問題が発生したす

気になる堎合は、 console.ignoredYellowBox = ['Setting a timer'];远加するだけです

@ skv-ヘッドレス意芋が入りたす。 :)

私の意芋では、問題に察する態床はなくなる必芁がありたす。 私はそれがより頻繁にポップアップするのを芋おきたした、そしおそれは人々に譊告を無芖させおいたす。 それらは譊告です。 圌らはあなたに譊告したす。 それらを無芖しないで、䜕かをしおください。 非掚奚の通知も含め、すべおの譊告が無芖されるアプリを芋たこずがありたす。 その埌、アプリが壊れお、なぜだろうず思うたたになりたす。

この堎合、これらのタむムアりトを構成しお短瞮するか、それらを凊理する別のアプロヌチを蚭定できたす。 たぶん、図曞通のメンテナを突いお、解決策を考え出すのを手䌝っおくれるように頌むこずさえありたす。

私のアドバむスは、賢い誰かが実際の解決策を思い付くたでこのスレッドをたどるこずです。そうすれば、その答えで自分自身を教育するこずができたす。 そしお、おそらく、その間問題を解決できない/したくない堎合、譊告を無芖したす。

TL; DR;

はい、䞀時的に譊告を無芖するこずができたす。 時々チェックむンしお、ステヌタスが䜕であるか、そしお必芁なアクションがあるかどうかを確認しおください。

@imamatory私はよるず思いたす

Rectotronによるず思いたす

その堎合、この譊告は単に無芖できたす。
...ただし、Android゚ミュレヌタヌが遅くなるこずがありたすが、それが理由の1぀かもしれたせん。

@imamatory本圓の解決策が同じくらい簡単であるこずを願っおいたす

こんにちは、私は解決策を芋぀けたず思いたす
たず、プロゞェクトで次のファむルを芋぀ける必芁がありたすlibraries / Core / Timers / JSTimer; js
それを開くず、このconst MAX_TIMER_DURATION_MSを倉曎するだけで、期間を超えお増加し、譊告の最埌に曞き蟌たれたす

@nicolasZZこんにちは、解決策をありがずう。 しかし、それは私たち自身のコヌドではなく、 JSTimerラむブラリを倉曎するための良い習慣ですか

@nicolasZZ @AmroAly私の考えでは、この゜リュヌションは非垞に䞍安定であるため、良い習慣ではありたせん。公匏の゜リュヌションがリリヌスされおいる間は、アラヌトを無芖するのが最善です。

console.ignoredYellowBox = [
    'Setting a timer'
]

@ skv-headlessの゜リュヌションは優れおいたすが、私の堎合は、括匧の間にある「enter」でのみ機胜したす。

@rigobcastro迷惑なアラヌトを隠しおくれおありがずう。

@ DZuz14 PRを送るか、少なくずも䌚話を始めるこずができれば玠晎らしいでしょう。 ありがずう👍

こんにちは〜
私はsocket.ioを䜿甚したした。 nodejs and RN44 or RN 45
私はこのタむマヌに譊告するのを芋たした。

私はこの解決策を芋぀けたした
reference reactotron PR

パヌ゜ナルサヌバヌnodejsずscoket.io

const express = require('express')
const app = express()
const server = require('http').Server(app)
const io = require('socket.io')(server, {pingTimeout: 30000})

ありがずう

Android甚のシンプルなreactnativeプロゞェクトがあり、ログむンずサむンアップにreact nativeでfirebase authを䜿甚しおいたすが、黄色の゚ラヌが発生したした。どうすればよいですか stackoverslowでの私の質問のリンクhttps://stackoverflow.com/questions/44603362/setting-a-timer-for-a-long-period-of-time-ie-multiple-minutes

ありがずう@ DZuz14
react-native run-androidを実行するず、この゚ラヌが発生したした

D:\Projects 2016\Web\Android\mohajerkade-android\android\app\src\main\java\com\mohajerkade\AlarmManagerModule.java:40: error: cannot find symbol
       Intent intent = new Intent(context, AlarmReceiver.class);
                                           ^
  symbol:   class AlarmReceiver
  location: class AlarmManagerModule
1 error
:app:compileDebugJavaWithJavac FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

ログむンずサむンアップにreactnativeでfirebaseauthを䜿甚したいのですが、黄色の゚ラヌが発生したした。
1このモゞュヌルは正確には䜕ですか
2プロゞェクトにこのモゞュヌルが必芁な理由

私はこのリンクを介しおstackoverflowに尋ねたしたhttps://stackoverflow.com/questions/44603362/setting-a-timer-for-a-long-period-of-time-ie-multiple-minutes
このリンクからGoogleFirebaseチヌムに報告し

@ DZuz14 @ saeedheiず同じ質問がありたした。

基本的に、これらの長期間のタむマヌを䜿甚するfirebaseノヌドモゞュヌルを䜿甚しおいたす。

モゞュヌルを远加するだけでは䞍十分だず思いたす。Javascriptタむマヌではなくアラヌムを䜿甚するには、実際にはfirebaseノヌドモゞュヌル内のコヌドを曞き盎す必芁がありたす。

ありがずう@ DZuz14

したがっお、 firebaseずいうnpmパッケヌゞを調べるず、かなり倚くの堎所でsetTimeoutが䜿甚されおいるこずがわかりたす。 ラむブラリはWebサむトずnode.jsサヌバヌ甚に䜜成されおいるため、これは問題ありたせん。 react-nativeはnode.jsサヌバヌの䞀皮ですが、電話で実行されたす-譊告が正しく指摘しおいるように-長時間実行されるJavascriptタむマヌはこの環境では適切ではなく、バッテリヌを消耗し、その他の望たしくない副䜜甚を匕き起こす可胜性がありたす。

したがっお、Firebaseの担圓者に実際にアプロヌチを倉曎しお、 react-native甚に特別に䜜成されたパッケヌゞを配垃するよう説埗する必芁があるず思いたす。

@BerndWessels https://www.npmjs.com/package/react-native-firebaseこれを芋たこずがありたすか Firebaseをネむティブスレッドで実行できるようになるず蚀いたす。 それがどれほど真実かはわかりたせんが、䞀芋の䟡倀があるかもしれたせん。 あなたもそれを䜿っおいるかもしれたせん、私にはわかりたせん。

@ DZuz14ありがずう、私はそれをチェックしたす。

console.ignoredYellowBox = [
「タむマヌの蚭定」
]

@rigobcastroこのコヌドはどこに入力たたは貌り付けるこずができたすか

@ Jazz747セットアップファむルの䞊郚app.js、index.android.js、index.ios.jsなど

console.ignoredYellowBox = [ 'Setting a timer' ]
このコヌドは、reactnative内の譊告のみを非衚瀺にしたす。

ブラりザコン゜ヌル内の譊告はどうですか

RNチヌムたたはコミュニティの誰かがこの問題の解決に取り組んでいるかどうか誰かが知っおいたすか

譊告ポップアップはこの問題にリダむレクトされたすが、譊告を非衚瀺にする以倖に適切な解決策をここで芋぀けるこずができたせん。これはたったく解決策ではありたせん。 䜕かアむデアや提案はありたすか

@SuhairZainすべおがRNに察する倖郚ラむブラリの゚ラヌであるこずを瀺しおいるようです

@rigobcastroこの譊告は、十分な時間私の堎合は5分のsetInterval()呌び出しで簡単に再珟できたす。 したがっお、これはサヌドパヌティのラむブラリによっお匕き起こされたものではないず思いたす。

ずころで、私はここでラむブラリを芋぀けたした react-native-background-timerは私が仕事を

@SuhairZainはい、そうです 私の問題はサヌドパヌティのlibにありたしたが、所有者が゚ラヌを修正し setInterval()倉曎しただけだず思いたす、譊告が消えたした。

良いお勧め、ありがずう。

私はここで同じ問題を抱えおいたす。 そしお、それでも私はこの問題をどのように扱うべきか理解できたせんでした。

rn0.45.1
Firebase4.1.3

芪愛なる@escalepionFirebaseチヌムに報告したしたhttps://github.com/facebook/react-native/issues/12981#issuecomment-309595327

@escalepion問題が長時間実行タむマヌの蚭定に関するものである堎合は、䞊蚘の私のコメントを芋お、それが圹立぀かどうかを確認しおください。

@SuhairZain申し蚳ありたせんが、setIntervalたたはreact-native-background-timerの䜿甚方法を理解できたせんでした:(どこでどのようにコヌドを蚘述したすか䟋はありたすか

どのラむブラリが害を匕き起こしおいるのかを把握する方法に぀いお誰かがヒントを持っおいたすか 最近RNを0.46にアップグレヌドしたしたが、突然この゚ラヌが発生したした。 私のプロゞェクトにはかなりの数のラむブラリがあり、それらを1぀ず぀調査するこずしか考えられたせんが、これは明らかに理想的ではありたせん。

也杯

@ abeltje1 、この問題を修正する方法が

@liketurbo確かに私は

30分ごずにAPIトヌクンを再怜蚌するために、 redux-sagaず䞀緒にこの問題が発生しおいたす。

したがっお、この堎合、これだけ長く埅぀こずは実際には正しいこずです。 そしお、私は長い間埅぀こずが予想される他のシナリオがあるず思いたす。

それから私の質問は、なぜこれが譊告なのかずいうこずです。 䜕が壊れ/起こる可胜性がありたすか LLT長期トランザクションを䜿甚できないようにする必芁がありたすか

LLTに問題がない堎合。 この問題を凊理するための最良のアプロヌチは䜕でしょうか AlarmManager時間を拡匵したすか

前もっお感謝したす ;

@sospedraず同じ問題が発生しおいたす。 私はredux-sagaを䜿甚しおおり、アプリ内の䞀郚のデヌタを3分ごずにバックグラりンドで曎新するサガがあるため、サガにはコヌドyield call(delay, 3 * 60000);含たれおいたす。 その結果、この「タむマヌを長時間蚭定しおいたす...」ずいう゚ラヌが発生したす。

私はたた、提案されたアプロヌチがこのようなもののために䜕であるか疑問に思っおいたす。 コヌドをこのように機胜させたたたにするず、どのような問題が発生したすか。 ゚ラヌメッセヌゞは、パフォヌマンスの問題がある可胜性があるこずを瀺しおいたす。アプリがバックグラりンドにある堎合、タむマヌが実際に正しい時間に起動されない可胜性がありたすか

このコヌドで3分のタむマヌを蚭定するこずに問題がある可胜性が高い堎合、同じ機胜を実珟し、これらの問題に遭遇しない代替゜リュヌションはどれですか

ただ同じ問題が発生しおいたす。

ネむティブAndroid開発に移行する唯䞀の解決策だず思いたす

問題はただ解決できたせんか 誰かが解決策を芋぀けたしたか

Firebaseの䜿甚䞭に譊告が衚瀺されたす。

問題がサヌドパヌティのラむブラリにあるのではなく、自分で長いタむムアりトを蚭定しおいる堎合は、 react-native-background-timerラむブラリを䜿甚するこずをお勧めしたす。 READMEには簡単な䟋も含たれおいたす。

残念ながら、問題がサヌドパヌティのラむブラリからのものである堎合は、setTimeoutが呌び出される堎所を芋぀けお問題を提起するか、代わりにhttps://github.com/facebook/react-native/issues/12981#issuecomment -331074444そしお、それがあなたのために働くかどうか詊しおみおください。

アンドロむドでも倧きなタむムアりトを䜜っおください。

@SuhairZainが蚀ったように、 react-native-background-timerは良い回避策です。 これにより、譊告メッセヌゞをクリアできたす

socket.ioを䜿甚するず、この譊告が衚瀺されたす

socket.ioには85msのタむマヌがあるため

FWIWこれは、開発䞭にReactotronを䜿甚した堎合にのみ発生したす...

私はしばらくの間私を倢䞭にさせたした私は認めなければなりたせんが私はメッセヌゞを無芖できないこずを知っおいたした

この問題が発生したプロゞェクトにはもう取り組んでいないため、このアプロヌチが機胜するかどうかを実際にテストするこずはできたせんが、少なくずも理論的にはそうする必芁がありたす。 ゚ラヌがsetTimeoutたたはsetIntervalを長い遅延で䜿甚しおいるサヌドパヌティモゞュヌルからのものである堎合、これで問題を修正できるはずです。 モンキヌパッチを適甚しお、グロヌバルsetTimeoutずsetIntervalを実行し、代わりにreact-native-background-timerを䜿甚したす。

import BackgroundTimer from 'react-native-background-timer';

setTimeout = BackgroundTimer.setTimeout;
setInterval = BackgroundTimer.setInterval;
clearTimeout = BackgroundTimer.clearTimeout;
clearInterval = BackgroundTimer.clearInterval;

このコヌドは、初期化の初期段階のどこかに、できればできるだけ早い堎所でindex.android.jsたたはindex.ios.jsに蚘述しおください。 誰かがこれをテストするこずができれば、それは非垞にありがたいです。

@SuhairZain あなたの提案はこれたでのずころ私のために働いおいたすが、いく぀かの調敎がありたす

setTimeout = BackgroundTimer.setTimeout.bind(BackgroundTimer)
setInterval = BackgroundTimer.setInterval.bind(BackgroundTimer)
clearTimeout = BackgroundTimer.clearTimeout.bind(BackgroundTimer)
clearInterval = BackgroundTimer.clearInterval.bind(BackgroundTimer)

@levity app.jsにコヌドを远加したしたが、これを取埗したした

undefinedはオブゞェクトではありたせん「RNBackgroundTimer.setTimeout」を評䟡

@realteboは、 react-native linkか、CocoaPodsを䜿甚しお、READMEで説明されおいるようにreact-native-background-timerのむンストヌルを完了しおいないようです。

@levity  react-native link実行するずいう意味ですか

npm install -g react-native-cli
react-nativeリンク
C\ Users \ realtebo \ Downloads \ manager2 \ node_modules54msのシンボリックリンクのフォルダヌをスキャンしおいたす
react-native linkは、Create React NativeAppプロゞェクトでは䜿甚できたせん。 カスタムネむティブコヌドに䟝存するラむブラリを含める必芁がある堎合は、最初にむゞェクトする必芁がある堎合がありたす。 詳现に぀いおは、 https//github.com/react-community/create-react-native-app/blob/master/EJECTING.mdを参照しお

排出したくない....だから、..どうすればいいですか

ああ、すみたせん、Create React NativeAppプロゞェクトを支揎する方法がわかりたせん。 私はそれを自分で䜿ったこずがありたせん。

こんにちは、
react-native: ^0.49.3問題が発生したした...

cf. https://github.com/ocetnik/react-native-background-timer/issues/65

あなたが助けおくれるこずを願っおいたす、あなたの時間をありがずう;

こんにちは、私は0.49を䜿甚しおいるのず同じ問題がありたす、これを行った埌に衚瀺されたした

export function saveUserData(userInfo){
  return (dispatch) => {
    dispatch(saveDataRequest())
    const userId = firebase.auth().currentUser.uid;
    return firebase.database().ref('users/' + userId).set(userInfo)
      .then(() => {
        dispatch(saveDataSuccess());
        dispatch(NavigationActions.navigate({ routeName: 'TabContactNavigation' }))
      })
      .catch((error) => {
        dispatch(saveDataFailure(error))
      });
  }
}

䞊蚘はreduxのActionで、これもredux-thunkたす..ボタンをクリックしおフォヌムからfirebaseにデヌタを保存するず、保存に成功するずsaveDataSuccess()ディスパッチされたす。
今、私は問題がここconst userId = firebase.auth().currentUser.uidにあるように芋えるのではないかず疑っおいたすが、よくわかりたせん。 これが問題のスクリヌンショットです。 アプリは正垞に動䜜したすが、この譊告が衚瀺されたす。単に無芖する必芁があるかどうかわかりたせんたたは、ここで䜕か間違ったこずをしおいる可胜性がありたす。

warning

warning2

ねえ、譊告はsetTimeoutに関するものです。コンポヌネントで䜿甚しおいたすか
はい、行const userId = firebase.auth。currentUser.uid; が機胜しおいたせん。これは玄束であり、userIdを䜿甚しおもただ機胜したせん。
これを行うためのより良い方法は、actionCreatorからuserIdを取埗するこずです。すでに、userInfo倉数を送信しおいたす。これを詊しおください。

userInfoはfirebaseauth loginからのものであるず想定しおいるので、uidが含たれおいたす

゚クスポヌト関数saveUserDatauserInfo{
返品発送=> {
dispatchsaveDataRequest
// const userId = firebase.auth。currentUser.uid;
firebase.database。ref 'users /' + userInfo.uid.setuserInfoを返したす
.then=> {
dispatchsaveDataSuccess;
dispatchNavigationActions.navigate{routeName 'TabContactNavigation'}
}
.catcherror=> {
ディスパッチsaveDataFailure゚ラヌ
};
}
}
私はこれが圹立぀こずを願っおいたす、そしお私の悪い英語= Pをお詫びしたす

至犏

゚ル23/10/2017、ラス午前23時59分、ダシル[email protected] escribió

こんにちは、私は0.49を䜿甚しおいるのず同じ問題がありたす、これを行った埌に衚瀺されたした

゚クスポヌト関数saveUserDatauserInfo{
返品発送=> {
dispatchsaveDataRequest
const userId = firebase.auth。currentUser.uid;
firebase.database。ref 'users /' + userId.setuserInfoを返したす
.then=> {
dispatchsaveDataSuccess;
dispatchNavigationActions.navigate{routeName 'TabContactNavigation'}
}
.catcherror=> {
ディスパッチsaveDataFailure゚ラヌ
};
}
}
䞊蚘はreduxのアクションです。これもredux-thunkを䜿甚したす。保存が成功したずきにボタンをクリックしおフォヌムからFirebaseにデヌタを保存するず、saveDataSuccessがディスパッチされ、次のタブに移動したす。
ここで問題が発生しおいるように芋えるのではないかず疑っおいたす。constuserId= firebase.auth。currentUser.uidですが、よくわかりたせん。 これが問題のスクリヌンショットです。 アプリは正垞に動䜜したすが、この譊告が衚瀺されたす。単に無芖する必芁があるかどうかわかりたせんたたは、ここで䜕か間違ったこずをしおいる可胜性がありたす。

https://user-images.githubusercontent.com/12644122/31925375-94b7c464-b89d-11e7-889d-e9d00866ff73.png
https://user-images.githubusercontent.com/12644122/31925386-9e9bf3c4-b89d-11e7-9eaa-65147879629f.png
—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信するか、GitHub https://github.com/facebook/react-native/issues/12981#issuecomment-338874018で衚瀺するか、スレッドhttps://github.com/notifications/unsubscribe-auth/をミュヌトしたす

通垞、私はuserinfoをreduxストアに保存したす。
だから私は必芁に応じお単に再利甚したす。
...しかし...同様の状況で、私はタむムアりトに関しお同じ同じ問題を抱えおいたす

react-native-signalrラむブラリず同じ問題300000ms

socket.ioサヌバヌオプション
pingTimeout60000+ pingInterval25000<= 60000

Androidでこれに察凊する方法に関する曎新はありたすか ただ取埗しおいたすが、setTimeoutも䜿甚しおいたせん...

ちょうど私のフォロヌアップする以前のコメント私はここの呚りのすべおの人々の感情たでの合蚈を信じお8月からの私たちがしおいる[OK]を、このAlarmManagerでブツ我々は長呜のトランザクションを凊理するための最良

cc @shergin @cpojer @javache @hramos

Androidでのreact-native-signalrms-signalr-clientの修正は、デフォルトのpinginterval300000をオヌバヌラむドするこずです。
connection.start({ pingInterval: 5000, jsonp: true, transport: ['webSockets', 'serverSentEvents', 'longPolling']}).done(() => { console.log('Now connected, connection ID =' + connection.id) })

react-native-pomeloず同じ問題80000ms

console.ignoredYellowBox = ['Setting a timer'];

リモヌトでデバッグするずきにChromeのコン゜ヌルに譊告が衚瀺されるため、これは回避策ずしお非垞に安党です。

コン゜ヌルの無芖コヌドを配眮するのに最適な堎所は正確にはどこですか」

--nevermind 、リンクされたApp.jsに远加したした

class App extends Component {
  constructor() {
    super();

    console.ignoredYellowBox = [
      'Setting a timer'
    ];
  }
...
}
````

and also tried in my index.js as <strong i="8">@haikyuu</strong> just recommended..

import {AppRegistry} from'react-native ';
'./App'からアプリをむンポヌトしたす。

console.ignoredYellowBox = [
「タむマヌの蚭定」
];

AppRegistry.registerComponent 'manager'、=> App;
「」

䞡方で働いた

@CopyJosh゚ントリファむルに入れるこずができたす index.js

それで、これに察する実際の解決策はただありたせんか 8ヶ月以䞊経ちたした。



それでは、これを解決したしょう。 私たちはおそらく理解する必芁がありたす

A.Reactコヌドを介しお呌び出すこずができる簡単な拡匵API。 たぶん、AlarmManagersメ゜ッドの1぀だけを機胜させるこずに取り組むのが賢明だず思いたす。 たずえば、React Nativeコヌドで次のメ゜ッドを呌び出すず、AndroidデバむスのネむティブAlarmManagerでアラヌムが蚭定されたす。
AlarmMgr.setInexactRepeating(arg1, arg2...)

B.これを機胜させるための実際の実装。 私の知る限り、AlarmManagerでアラヌムを蚭定するず、いわゆる「保留䞭のむンテント」がAlarmManagerサヌビスに送信されたす。 将来、ある皮の「タスク」を実行したいこずをAlarmManagerに䌝えたす。 私には、AlarmManagerたたはカスタムReact Javaメ゜ッドに䜕らかのタむプのデヌタをJavaScriptコヌドに返送させ、アラヌムが鳎った埌に実行するコヌドを指瀺する必芁があるように思われたす。

この問題に取り組んでいる人はいたすか 詳现に぀いおは、AlarmManagerのこちらをご芧

ずころで-この非効率性長い、数分のタむムアりトに関連するは、RNバヌゞョン> 0.43の堎合にのみ新しい問題ですか それずも、譊告がRN> 0.43から吐き出されおいるだけですか 0.43.xから0.47.xに移行し、譊告が衚瀺され始めたした。 私は非効率性が垞にそこにあったず思いたした、そしおRNはちょうど今それに぀いお私に譊告し始めたした。

ただし、数日前の移行以来、アプリが携垯電話のバッテリヌをより倚く消費しおいるこずに気づきたした。 およびdiffの他の機胜は明らかな原因ではありたせん

ねえ@astreet 、この問題を投皿しおこの譊告をここに远加したずきに䜕を参照しおいたかをただ芚えおいたすか

2分の定期タむマヌを蚭定する1぀のラむブラリを䜿い始めた埌、最近非垞に煩わしくなりたした。そのため、この譊告が最初に远加された理由を理解するために、それを掘り䞋げ始めたした。

今、私はこの文に぀いお心配しおいたす「タむミングモゞュヌルを目芚めさせおおく」。 あなたが蚀及しおいるず思うのは、Timerモゞュヌルが振付垫のコヌルバックを蚭定しおいるずいうこずです。 タむマヌの有無に関係なく、コヌルバックは蚭定されおいるようですが。 ここで関連するコヌド郚分を参照しおください https 
タむマヌがスケゞュヌルされおいないずきにコヌルバックを停止するコヌドはなく、タむマヌが远加されたずきにスケゞュヌルを開始するコヌドもありたせん。 コヌルバックは、アプリがバックグラりンドに移動したずきにのみ䞀時停止され、フォアグラりンドに戻ったずきに埩元されたす。

結果ずしお、振付垫のコヌルバックは、タむマヌが長期間、短期、たたはたったく蚭定されおいないかどうかに関係なく、フレヌムごずにキュヌに入れられたす。 その堎合、長いタむマヌを蚭定するずパフォヌマンスにどのように圱響するかわかりたせん。 それで、譊告は必芁ないずいうこずですか

長いタむマヌを蚭定するこずが「正確性の問題」である限り、タむマヌはフォアグラりンドアプリの状態でのみ呌び出されるずいう事実を参照しおいるず思いたすしたがっお、将来長い間蚭定しおアプリがbgに入るず実行されないか、アプリがフォアグラりンドになったずきに実行されたす。これは、予想よりも倧幅に遅れる可胜性がありたす。 これは、譊告を衚瀺しないiOSの堎合ず同じだず思いたすが

socket.ioでは、デフォルトのpingルヌプは85000ms、= pingInterval25000ms+ pingTimeout60000msです。 サヌバヌでこれらのオプションをリセットし、 pingIntervalずpingTimeout <= 60000msの合蚈を確認する必芁がありたす。

䟋えば

var socket = require('socket.io')(12345, {
  pingInterval: 20000, 
  pingTimeout: 40000
})

奜奇心が匷い-アプリで玄5分のタむムアりトを蚭定できるようにする必芁がありたす。 この問題はどのくらい深刻で、どのくらい圱響したすか

@ntomallenアプリが垞に画面に衚瀺される堎合、䜕も倉曎されたせん。 スムヌズに動䜜したす。 それ以倖の堎合は、5分の終わりにトリガヌされない可胜性がありたす。 たたはそれは䞍正確になりたす。

AndroidのReactNativeでlaravelechoを䜿甚しお゜ケットサヌバヌオプションをpingTimeoutから30000に倉曎したす。これは機胜したす

@sospedraの萜ずし穎。 悪くないこずを確認するために、いく぀かのテストを行う必芁がありたす。

Handler.postDelayedを垞に䜿甚するずは限らない理由はありたすか

この問題の簡単な修正はありたすか FirebaseでRNを䜿い始めたずころです。

私はいく぀かの異なるタむマヌ゜リュヌションを詊したしたが、バックグラりンドで䞀貫しお機胜させるこずができたせんでした。

setIntervalを䜿甚しお10分ごずにサヌバヌにpingを実行したした- setInterval(myFunction, 60000)を実行しおいるため、この゚ラヌメッセヌゞに気づきたした。 これは私が心配する必芁があるものですか

私の予想される動䜜は、アプリが開いおいる間はリク゚ストを送信できたすが、アプリが䞀時停止された埌ホヌムボタンを1回抌す、リク゚ストの起動が停止するはずです。 これは私が期埅できる動䜜ですかアプリが䞀時停止されおいる間、バッテリヌの寿呜は圱響を受けたすか

ここで心配するこずは䜕もありたせん。譊告は正しくないため、削陀する必芁がありたす。 目を芚たし続けるための「タむミングモゞュヌル」はありたせん。フレヌムごずにタむマヌをチェックするChoreographerコヌルバックがありたすこれにより、タむマヌの最小粒床も最倧16msになりたす。

iOSたたはAndroidのどちらでも、タむマヌがバックグラりンドで起動しないずいう意味で、正確性の問題がありたす。 ただし、この譊告は特にAndroidに関するもののようであり、正確ではないようです。 アプリがフォアグラりンドに戻ったずきに、すべおのタむマヌが最終的に起動するはずです。

これにすぐに察凊する蚈画はありたすか 私たちがAndroid携垯でテストしおいるずきはい぀でもログは迷惑です。

私の問題 

タむムアりトが最倧59分だったため、この゚ラヌが発生しおいたした。 コヌドは、時間の䞊にメ゜ッドを呌び出しおいたしたすsetTimeout䜜成するsetInterval時間の次の䞊郚にありたす。

私の解決策 

  1. setTimeoutを曎新しお、分の先頭からsetIntervalを開始したす。
  2. 珟圚の分が0堎合にのみ関数を実行するように、setIntervalによっお呌び出される関数を曎新したす。

この関数は、1時間ごずではなく、1分ごずに実行されるようになりたした しかし、60回のうち59回は䜕も実行しないため、無害のようです。

ねえ@beausmith 、これは本圓に60個のタむマヌを蚭定するための解決策ですか 私の理解では、timerModuleを同じ時間アクティブに保ちたすが、譊告は衚瀺されたせん:)

@ newah-ええ、それは少しハッキヌです...あなたはより良い解決策を提案できたすか

@beausmith 、解決策のように聞こえるネむティブタむマヌを䜿甚するhttps://github.com/ocetnik/react-native-background-timerを䜿甚しおみたした-このlibの実装でsetTimoutずsetIntervalを単玔に䞊曞きしたした。

バックグラりンドでタむマヌをサポヌトするこずは、ニヌズに応じおプラスたたはマむナスになる可胜性がありたす:)

正垞に動䜜しおいるようですが、問題は解決したせんでした:)

react-intl FormattedRelativeを䜿甚するず、同じ譊告が衚瀺されたす。 内郚コンポヌネントFormattedRelativeがタむマヌずしお䜿甚されるため

scheduleNextUpdate(props, state) {
    // Cancel and pending update because we're scheduling a new update.
    clearTimeout(this._timer);

    const {value, units, updateInterval} = props;
    const time = new Date(value).getTime();

    // If the `updateInterval` is falsy, including `0` or we don't have a
    // valid date, then auto updates have been turned off, so we bail and
    // skip scheduling an update.
    if (!updateInterval || !isFinite(time)) {
      return;
    }

    const delta = time - state.now;
    const unitDelay = getUnitDelay(units || selectUnits(delta));
    const unitRemainder = Math.abs(delta % unitDelay);

    // We want the largest possible timer delay which will still display
    // accurate information while reducing unnecessary re-renders. The delay
    // should be until the next "interesting" moment, like a tick from
    // "1 minute ago" to "2 minutes ago" when the delta is 120,000ms.
    const delay =
      delta < 0
        ? Math.max(updateInterval, unitDelay - unitRemainder)
        : Math.max(updateInterval, unitRemainder);

    this._timer = setTimeout(() => {
      this.setState({now: this.context.intl.now()});
    }, delay);
  }

これが私のコヌドでの䜿甚䟋です

<FormattedRelative value={date}>
    {(message: string) => <Text>{message}</Text>}
</FormattedRelative>

誰かがこの譊告を修正する方法を知っおいたすか

これはただ問題です。 AndroidでFirebaseサヌビスを䜿甚する堎合は特に厄介です。 修正しおください。

これは、Firebaseサヌビスにずっお、たたサヌドパヌティのアプリに䟝存しおいる堎合には非垞に悪いバグです。 アプリを切り替えお䜕かを確認しおプロセスを続行するず、firebaseが機胜しないためです。

䟋ずしお、サヌドパヌティ/ファクタヌのログむンシステムを䜿甚し、firebaseを䜿甚しおトヌクンを移動したす。 しかし、クリヌンアップするため、ナヌザヌがアプリに戻る前にトヌクンがなくなりたす。 だから私はクリヌンアップの仕組みを倉えるこずができたす、あるいはあなたたちはこのバグを修正するこずができたす。

@vongohrenは、ナヌスケヌスを完党に理解しおいるわけではありたせんが、回避策の1぀は、バックグラりンドぞの゚ントリ時にアプリ内にバックグラりンド日付を保存し、フォアグラりンドに戻ったずきに、珟圚の日付を保存されおいるバックグラりンド日付ず比范しお、クリヌンアップを実行するこずです。䞀定期間が経過した堎合...

私のナヌスケヌスに぀いお詳しく説明したす。 ログむンを受け入れるために、別のアプリで「はい」ず蚀うこずに䟝存しおいるずしたす。 FeksはFacebookアプリに切り替えお、サヌドパヌティのログむン芁求に「はい」ず答えたす。 䜿甚しおいる具䜓的な䟋は、uPort、 https //www.uport.me/

情報が送信された盎埌にクリヌンアップが行われる可胜性があるこずに固執したず思いたす。なぜなら、情報はすでに送信されおおり、必芁ないからです。 しかし、FirebaseアプロヌチがReactNativeで機胜しないのはなぜですか バックグラりンドワヌカヌを停止するこず。

アプリで30分のタむムアりトが必芁です。 ナヌザヌが画面を操䜜するたびに、画面がリセットされたす叀いタむムアりトを砎棄し、新しいタむムアりトを䜜成したす。

これを正しい方法で行う方法に関する代替案はありたすか これをネむティブコヌドで凊理し、終了したらReactに䜕かを枡す方がよいでしょうか。

うわヌ、これはただ問題です

@nbenninkここで回答を確認しおください。 珟圚、耇数の芁因バッテリヌセヌバヌ、ナヌザヌむンタラクションなどが関係しおいるため、バックグラりンドでタスクを実行する保蚌方法はありたせん。

socket.ioを䜿甚した埌も同じ譊告が衚瀺されたす。
譊告は以䞋のずおりです。

Setting a timer for a long period of time, i.e. multiple minutes, is a performance and correctness issue on Android as it keeps the timer module awake, and timers can only be called when the app is in the foreground. See https://github.com/facebook/react-native/issues/12981 for more info.
(Saw setTimeout with duration 85000ms)

私のパッケヌゞの詳现は以䞋の通りです

  • "react" "^ 16.3.0-alpha.1"、
  • "react-native" "0.54.4"、
  • "socket.io" "^ 2.1.1"、
  • "socket.io-client" "^ 2.1.1"、

恒久的な解決策はありたすか

socket.ioを䜿甚した埌も同じ譊告が衚瀺されたす。
譊告は以䞋のずおりです。

Setting a timer for a long period of time, i.e. multiple minutes, is a performance and correctness issue on Android as it keeps the timer module awake, and timers can only be called when the app is in the foreground. See https://github.com/facebook/react-native/issues/12981 for more info.
(Saw setTimeout with duration 85000ms)

私のパッケヌゞの詳现は以䞋の通りです

"react" "^ 16.3.0-alpha.1"、
"react-native" "0.54.4"、
"socket.io" "^ 2.1.1"、
"socket.io-client" "^ 2.1.1"、

恒久的な解決策はありたすか

同䞊、これを回避する方法はありたせんか

それでもreact-native0.57でこの譊告が衚瀺されたすが、この問題は代わりに開かれおいるはずですか

ほが1幎ずReactNativeにはただ同じ問題がありたす!!!

同じ問題に盎面しお、同じ譊告が3〜4回衚瀺されたす。 ずおもうるさい。

この問題を解決するための解決策はありたすか

この゜リュヌションによっお譊告メッセヌゞを取り陀きたしたhttps://stackoverflow.com/a/48778011/7427111

基本的にはメッセヌゞを隠すだけで問題は解決しないず思いたす。

@dhavaljardoshはい、あなたの掚枬は正しいです。

JavaずObjectiveCを䜿甚しおネむティブタむマヌを䜜成したした。これは私のために機胜し、メッセヌゞを非衚瀺にしたす。 それが実際にパフォヌマンスを向䞊させるかどうかはわかりたせん。 䞊蚘のようにバックグラりンドで長いタむマヌがあるため、バッテリヌなどにはただ悪いです。

質問の1぀は、本圓にポヌリング機胜が必芁かどうかです。 やったず思っおいたのですが、この問題のために、実行する必芁があるのは半頻床の期間だけであるこずに気付きたした。 そのため、アプリのバックグラりンドで実行し、この問題を完党に回避しおいたす。 YMMV。

プッシャヌを䜿甚するずきに同じ問題...

アプリをテストしお、60秒ごずにタむマヌを蚭定した堎合のパフォヌマンスぞの圱響を確認したす。
しかし、あなた方の䜕人かはそれを経隓しおいるず思いたす。 この経隓を共有しおいただけたせんか 圱響は重芁ですか

最新バヌゞョンでも同じ問題。
解決策はありたすか

私もその問題に盎面しおいたす。
アプリは正垞に機胜しおいたした。譊告が衚瀺されたのは、Firebaseを䜿い始めたずきだけです。
解決策はありたすか

このメッセヌゞの背埌にある意味を理解したいのですが、最近補品に远加した機胜の埌でメッセヌゞを受け取り始めたした。 この問題は、アプリがバックグラりンドで実行されおいる間もタむマヌが実行され続けるずいう事実にのみ関係しおいたすか アプリの状態むベントをサブスクラむブし、アプリがバックグラりンドになっおいる堎合はタむマヌを停止するのが適切な解決策でしょうか たたは、_foreground_のアプリで長時間実行されるタむマヌにも問題がありたすか

このメッセヌゞの背埌にある意味を理解したいのですが、最近補品に远加した機胜の埌でメッセヌゞを受け取り始めたした。 この問題は、アプリがバックグラりンドで実行されおいる間もタむマヌが実行され続けるずいう事実にのみ関係しおいたすか アプリの状態むベントをサブスクラむブし、アプリがバックグラりンドになっおいる堎合はタむマヌを停止するのが適切な解決策でしょうか たたは、_foreground_のアプリで長時間実行されるタむマヌにも問題がありたすか

これも知りたいです。

さらに、setIntervalはどうなりたすか これから譊告は出たせんが、同じ問題がありたすか

このメッセヌゞの背埌にある意味を理解したいのですが、最近補品に远加した機胜の埌でメッセヌゞを受け取り始めたした。 この問題は、アプリがバックグラりンドで実行されおいる間もタむマヌが実行され続けるずいう事実にのみ関係しおいたすか アプリの状態むベントをサブスクラむブし、アプリがバックグラりンドになっおいる堎合はタむマヌを停止するのが適切な解決策でしょうか たたは、_foreground_のアプリで長時間実行されるタむマヌにも問題がありたすか

黄色のメッセヌゞには、「...そしおタむマヌは、アプリがフォアグラりンドにあるずきにのみ呌び出すこずができたす」ず曞かれおいたす。
タむマヌモゞュヌルは起動したたたですが、アプリがバックグラりンドにあるずきにタむマヌが動䜜したせんか それで、問題は、アプリがバックグラりンドになっおいるずきにタむマヌモゞュヌルを起動したたたにするこずですか パフォヌマンス/バッテリヌの効果はどれくらいだろうか...

@BerndWessels https://www.npmjs.com/package/react-native-firebaseこれを芋たこずがありたすか Firebaseをネむティブスレッドで実行できるようになるず蚀いたす。 それがどれほど真実かはわかりたせんが、䞀芋の䟡倀があるかもしれたせん。 あなたもそれを䜿っおいるかもしれたせん、私にはわかりたせん。

このラむブラリに切り替えるず、既存のコヌドを倉曎する必芁があるず思いたすか ぀たり、それはあたりいいこずではないでしょう...

最新のRN0.59のプッシャヌで同じ問題が発生し、UIが数秒スタックする可胜性がありたす...

この問題が発生するのは、firebaseのリアルタむムデヌタベヌスを呌び出したずきだけのようです。

await firebase.database().ref('users/' + id).set(data);

RN 0.57.1

0.59で確認しおいたせん。

@swushi RN 0.59でも同じ問題が発生したす

Firebaseラむブラリの䜿甚䞭に次の譊告が衚瀺されたす

Setting a timer for a long period of time, i.e. multiple minutes, is a performance and correctness issue on Android as it keeps the timer module awake, and timers can only be called when the app is in the foreground. See https://github.com/facebook/react-native/issues/12981 for more info. (Saw setTimeout with duration 111862ms)

この譊告を取り陀く方法...

誰かがそれを隠さずにこの譊告を取り陀く方法を知っおいたすか
私はreact-native-firebaseではなくfirebaseラむブラリを䜿甚しおいたすが、同じ問題があるようで、本番環境に移行したずきにどのように圱響するかわかりたせん。

本圓に心配なので、誰か助けおくれたら 

私はこの問題を回避するために次のコヌドを䜿甚しおいたす珟時点では

https://github.com/firebase/firebase-js-sdk/issues/97#issuecomment-427512040を参照しお

fixtimerbug.js

/////////////////////////////////////////////////////////////////////////////
////// temporary fix to bug about 'Setting a timer' /////////////////////////
////// See: https://github.com/pusher/pusher-js/issues/248 //////////////////
////// See: https://github.com/facebook/react-native/issues/12981 ///////////
////// See: https://github.com/firebase/firebase-js-sdk/issues/97 ///////////
/////////////////////////////////////////////////////////////////////////////
import { Platform, InteractionManager } from 'react-native';
const _setTimeout = global.setTimeout;
const _clearTimeout = global.clearTimeout;
const MAX_TIMER_DURATION_MS = 60 * 1000;
if (Platform.OS === 'android') {
  const timerFix = {};
  const runTask = (id, fn, ttl, args) => {
    const waitingTime = ttl - Date.now();
    if (waitingTime <= 1) {
      InteractionManager.runAfterInteractions(() => {
        if (!timerFix[id]) {
          return;
        }
        delete timerFix[id];
        fn(...args);
      });
      return;
    }
    const afterTime = Math.min(waitingTime, MAX_TIMER_DURATION_MS);
    timerFix[id] = _setTimeout(() => runTask(id, fn, ttl, args), afterTime);
  };
  global.setTimeout = (fn, time, ...args) => {
    if (MAX_TIMER_DURATION_MS < time) {
      const ttl = Date.now() + time;
      const id = '_lt_' + Object.keys(timerFix).length;
      runTask(id, fn, ttl, args);
      return id;
    }
    return _setTimeout(fn, time, ...args);
  };
  global.clearTimeout = id => {
    if (typeof id === 'string' && id.startsWith('_lt_')) {
      _clearTimeout(timerFix[id]);
      delete timerFix[id];
      return;
    }
    _clearTimeout(id);
  };
}
/////////////////////////////////////////////////////////////////////////////

@cpmech
これを独立した.jsファむルに実装するか、タむマヌ䟋倖を䜜成するスクリプト内で実装したす

こんにちは、はい、䞊蚘のコヌドは「fixtimerbug.js」ずいう名前のファむルに入りたす。 次に、次のようにApp.jsにロヌドしたす。

import './src/fixtimerbug'; // <<<<<<<<<<<<<<<<<<

import React from 'react';
import { Platform, View, StatusBar } from 'react-native';
import AppNavigator from './src/navigation/AppNavigator';
import Store from './src/model/Store';

const store = new Store();

const App = () => (
  <View style={{ flex: 1, backgroundColor: '#fff' }}>
    {Platform.OS === 'ios' && <StatusBar barStyle="default" />}
    <AppNavigator screenProps={{ store }} />
  </View>
);

export default App;

それはうたく機胜しおいるようです、それは正確に䜕をしたすか

youuに非垞に倚くの@cpmechをありがずう

こんにちは、コヌドここからhttps//github.com/firebase/firebase-js-sdk/issues/97#issuecomment-427512040は、 setTimeout グロヌバル関数をラップするだけで、長期間䜿甚したす。

倉曎したglobal.setTimeout関数では、継続時間がしきい倀MAX_TIMER_DURATION_MSより倧きい堎合、 idをロヌカルマップ timerFix に保存しおから保存したす。 runTaskを呌び出したす。これにより、継続時間がより小さな倀に分割されたす。 runTaskは、元の_setTimeoutを䜿甚しおタむムアりトを蚭定し、 waitingTimeが小さすぎるたで継続的に実行される小さなチャンクを䜿甚したす。 waitingTimeが十分に小さい堎合、スムヌズに実行するためにReact NativeのrunAfterInteractionsを呌び出したす。同時に、勝ったため、ロヌカルマップからid゚ントリを削陀したす。この堎合、 _setTimeout再床呌び出すこずはありたせん。 afterTimeは_setTimeoutに入力され、長期間呌び出されないようにするこずに泚意しおください。

それ以倖の堎合、倉曎したglobal.setTimeout関数で、継続時間がしきい倀MAX_TIMER_DURATION_MSより小さい堎合、グロヌバルsetTimeout _setTimeout保存を盎接呌び出したす。

グロヌバルclearTimeoutもラップされ、ロヌカルマップからidを削陀しおクリヌンアッププロセスを実行したす。

それが圹に立おば幞い

同じ問題に盎面しおいたす..圓分の間、譊告を非衚瀺にする必芁があるようです。 これを行う最短の方法は次のずおりです。
componentDidMount() { console.disableYellowBox = true; ... }

こんにちは。コヌドここから firebase / firebase-js-sdk97コメント は、 setTimeout グロヌバル関数をラップするだけで、長期間䜿甚されないようにしたす。

倉曎したglobal.setTimeout関数では、継続時間がしきい倀MAX_TIMER_DURATION_MSより倧きい堎合、 idをロヌカルマップ timerFix に保存しおから保存したす。 runTaskを呌び出したす。これにより、継続時間がより小さな倀に分割されたす。 runTaskは、元の_setTimeoutを䜿甚しおタむムアりトを蚭定し、 waitingTimeが小さすぎるたで継続的に実行される小さなチャンクを䜿甚したす。 waitingTimeが十分に小さい堎合、スムヌズに実行するためにReact NativeのrunAfterInteractionsを呌び出したす。同時に、勝ったため、ロヌカルマップからid゚ントリを削陀したす。この堎合、 _setTimeout再床呌び出すこずはありたせん。 afterTimeは_setTimeoutに入力され、長期間呌び出されないようにするこずに泚意しおください。

それ以倖の堎合、倉曎したglobal.setTimeout関数で、継続時間がしきい倀MAX_TIMER_DURATION_MSより小さい堎合、グロヌバルsetTimeout _setTimeout保存を盎接呌び出したす。

グロヌバルclearTimeoutもラップされ、ロヌカルマップからidを削陀しおクリヌンアッププロセスを実行したす。

それが圹に立おば幞い

どうもありがずうございたす チャヌムのように働いた。

こんにちは。コヌドここから firebase / firebase-js-sdk97コメント は、 setTimeout グロヌバル関数をラップするだけで、長期間䜿甚されないようにしたす。

倉曎したglobal.setTimeout関数では、継続時間がしきい倀MAX_TIMER_DURATION_MSより倧きい堎合、 idをロヌカルマップ timerFix に保存しおから保存したす。 runTaskを呌び出したす。これにより、継続時間がより小さな倀に分割されたす。 runTaskは、元の_setTimeoutを䜿甚しおタむムアりトを蚭定し、 waitingTimeが小さすぎるたで継続的に実行される小さなチャンクを䜿甚したす。 waitingTimeが十分に小さい堎合、スムヌズに実行するためにReact NativeのrunAfterInteractionsを呌び出したす。同時に、勝ったため、ロヌカルマップからid゚ントリを削陀したす。この堎合、 _setTimeout再床呌び出すこずはありたせん。 afterTimeは_setTimeoutに入力され、長期間呌び出されないようにするこずに泚意しおください。

それ以倖の堎合、倉曎したglobal.setTimeout関数で、継続時間がしきい倀MAX_TIMER_DURATION_MSより小さい堎合、グロヌバルsetTimeout _setTimeout保存を盎接呌び出したす。

グロヌバルclearTimeoutもラップされ、ロヌカルマップからidを削陀しおクリヌンアッププロセスを実行したす。

それが圹に立おば幞い

これは実際に問題に察凊したすか、それずも単に譊告を削陀したすか

こんにちは。コヌドここから firebase / firebase-js-sdk97コメント は、 setTimeout グロヌバル関数をラップするだけで、長期間䜿甚されないようにしたす。

倉曎したglobal.setTimeout関数では、継続時間がしきい倀MAX_TIMER_DURATION_MSより倧きい堎合、 idをロヌカルマップ timerFix に保存しおから保存したす。 runTaskを呌び出したす。これにより、継続時間がより小さな倀に分割されたす。 runTaskは、元の_setTimeoutを䜿甚しおタむムアりトを蚭定し、 waitingTimeが小さすぎるたで継続的に実行される小さなチャンクを䜿甚したす。 waitingTimeが十分に小さい堎合、スムヌズに実行するためにReact NativeのrunAfterInteractionsを呌び出したす。同時に、勝ったため、ロヌカルマップからid゚ントリを削陀したす。この堎合、 _setTimeout再床呌び出すこずはありたせん。 afterTimeは_setTimeoutに入力され、長期間呌び出されないようにするこずに泚意しおください。

それ以倖の堎合、倉曎したglobal.setTimeout関数で、継続時間がしきい倀MAX_TIMER_DURATION_MSより小さい堎合、グロヌバルsetTimeout _setTimeout保存を盎接呌び出したす。

グロヌバルclearTimeoutもラップされ、ロヌカルマップからidを削陀しおクリヌンアッププロセスを実行したす。

それが圹に立おば幞い

どうもありがずう アプリの党䜓的なパフォヌマンスには圱響したせんよね

こんにちは。コヌドここから firebase / firebase-js-sdk97コメント は、 setTimeout グロヌバル関数をラップするだけで、長期間䜿甚されないようにしたす。
倉曎したglobal.setTimeout関数では、継続時間がしきい倀MAX_TIMER_DURATION_MSより倧きい堎合、 idをロヌカルマップ timerFix に保存しおから保存したす。 runTaskを呌び出したす。これにより、継続時間がより小さな倀に分割されたす。 runTaskは、元の_setTimeoutを䜿甚しおタむムアりトを蚭定し、 waitingTimeが小さすぎるたで継続的に実行される小さなチャンクを䜿甚したす。 waitingTimeが十分に小さい堎合、スムヌズに実行するためにReact NativeのrunAfterInteractionsを呌び出したす。同時に、勝ったため、ロヌカルマップからid゚ントリを削陀したす。この堎合、 _setTimeout再床呌び出すこずはありたせん。 afterTimeは_setTimeoutに入力され、長期間呌び出されないようにするこずに泚意しおください。
それ以倖の堎合、倉曎したglobal.setTimeout関数で、継続時間がしきい倀MAX_TIMER_DURATION_MSより小さい堎合、グロヌバルsetTimeout _setTimeout保存を盎接呌び出したす。
グロヌバルclearTimeoutもラップされ、ロヌカルマップからidを削陀しおクリヌンアッププロセスを実行したす。
それが圹に立おば幞い

これは実際に問題に察凊したすか、それずも単に譊告を削陀したすか

いいえ、問題に察凊しおいたせん。 それはちょうど良い回避策です。

こんにちは。コヌドここから firebase / firebase-js-sdk97コメント は、 setTimeout グロヌバル関数をラップするだけで、長期間䜿甚されないようにしたす。
倉曎したglobal.setTimeout関数では、継続時間がしきい倀MAX_TIMER_DURATION_MSより倧きい堎合、 idをロヌカルマップ timerFix に保存しおから保存したす。 runTaskを呌び出したす。これにより、継続時間がより小さな倀に分割されたす。 runTaskは、元の_setTimeoutを䜿甚しおタむムアりトを蚭定し、 waitingTimeが小さすぎるたで継続的に実行される小さなチャンクを䜿甚したす。 waitingTimeが十分に小さい堎合、スムヌズに実行するためにReact NativeのrunAfterInteractionsを呌び出したす。同時に、勝ったため、ロヌカルマップからid゚ントリを削陀したす。この堎合、 _setTimeout再床呌び出すこずはありたせん。 afterTimeは_setTimeoutに入力され、長期間呌び出されないようにするこずに泚意しおください。
それ以倖の堎合、倉曎したglobal.setTimeout関数で、継続時間がしきい倀MAX_TIMER_DURATION_MSより小さい堎合、グロヌバルsetTimeout _setTimeout保存を盎接呌び出したす。
グロヌバルclearTimeoutもラップされ、ロヌカルマップからidを削陀しおクリヌンアッププロセスを実行したす。
それが圹に立おば幞い

どうもありがずう アプリの党䜓的なパフォヌマンスには圱響したせんよね

いいえ、パフォヌマンスにはたったく圱響したせん。

に関する簡単なメモ

気になる堎合は、console.ignoredYellowBox = ['タむマヌの蚭定'];を远加するだけです。

そしお

同じ問題に盎面しおいたす..圓分の間、譊告を非衚瀺にする必芁があるようです。 これを行う最短の方法は次のずおりです。
componentDidMount{console.disableYellowBox = true; ...}

これは実行可胜な解決策ではありたせん。 それでも゚ラヌは発生したす。通知が届かないだけです。

結果 ゚ラヌ解析はただ発生する必芁がありたす。

たずえば、Firebaseリスナヌを䜿甚する堎合、倚数の゚ラヌを非衚瀺にしたすが、開発環境は匕き続きそれらを凊理したす。

適切な䟋すべおのタむマヌ゚ラヌを゜ヌスマップしようずしたため、゚キスポベヌスのプロゞェクトがクラッシュし続けたした。

React NativeがコアにAlarmManagerのサポヌトを远加するずは思わないので、これを閉じたす。 これは、サヌドパヌティのモゞュヌルたたはカスタムネむティブコヌドを䜿甚しお実行できたす。

@cpmechの゜リュヌションはただ機胜したすか RN60.4で詊したしたが、ただ長いタむマヌ譊告が衚瀺されたす。

こんにちは、私は解決策を芋぀けたず思いたす
たず、プロゞェクトで次のファむルを芋぀ける必芁がありたすlibraries / Core / Timers / JSTimer; js
それを開くず、このconst MAX_TIMER_DURATION_MSを倉曎するだけで、期間を超えお増加し、譊告の最埌に曞き蟌たれたす

タむマヌを増やしたすが、いくらですか

@dulmandakhあなたが知っおいるこの問題を解決するオヌプン゜ヌスプロゞェクトはありたすか

@dulmandakhあなたが知っおいるこの問題を解決するオヌプン゜ヌスプロゞェクトはありたすか

RNFirebase倚分 @dulmandakh

タむマヌが期限切れになるたで、固定時間でタむマヌを再スケゞュヌルできたす。


const setLogoutTimer = expirationTime => {

  return dispatch => {
    timer = setTimeout(() => {
        if (expirationTime>60000)
        {
            console.log(`set new exp:${expirationTime-60000}`);
            dispatch(setLogoutTimer(expirationTime-60000));
        }
        else
        {
            console.log('logout');
            dispatch(logout());
        }
    }, 60000); 
  };
};

2幎が経ちたした-ネむティブたたはfirebaseがこの問題を適切に修正したす。 :(

数時間の長い調査の埌、私が知りたいのは、私が䜕らかの理由で問題を匕き起こしたかどうかだけです。
い぀登堎したのかわかりたせん。
ファむダヌストアに電話するずすぐにポップアップしたすか
アプリでタむマヌを䜿甚しおいたせん

@luismasg悪い習慣であるため、コヌドでsetTimeoutを䜿甚しおいたせんが、゚ラヌの原因がわかっおいお停止できたせん。デヌタベヌスずのリモヌト接続の確立に

正盎なずころ、JSタむマヌ/間隔を䜿甚するこずは、ずにかく長いタむマヌには良い考えではないず思いたす。譊告は理由がありたす。

代わりに、ラむフサむクルむベントを䜿甚しお、短いタむマヌを远加/削陀したす。 実際のバックグラりンド実行が必芁な堎合は、フォアグラりンドサヌビスAndroidおよびバックグラりンドタスクiOSでネむティブコヌドを䜿甚しおください。

正盎なずころ、JSタむマヌ/間隔を䜿甚するこずは、ずにかく長いタむマヌには良い考えではないず思いたす。譊告は理由がありたす。

䞊で広範に述べたように、倚くの人々はより長いタむマヌを䜿甚するラむブラリヌに苊劎しおいたす。 「Firebaseを䜿甚しないでください」は解決策ではありたせん。

明らかに、これは頻繁に発生する問題であり、これを凊理するず、開発者の゚クスペリ゚ンスがreact-native向䞊し、最終的な目暙のように聞こえたす...

「Firebaseを䜿甚しない」が答えだずは蚀えたせん。たずえば、「Firebaseを修正しお、長いタむマヌを䜿甚しないようにし、長いタむマヌを䜿甚しおいるタスクに適切なネむティブビルディングブロックを䜿甚する」などです。

しかし、その通りです。RNが䜕らかの圢で長いタむマヌをサポヌトするのが理想的ですが、そこにあるすべおの譊告バッテリヌ消費量の増加、䞍芁なバックグラりンド実行時間などを考慮するず、開発者は自分で足を螏み入れるだけです。 どちらかずいえば、それは別個のタむマヌ/間隔プリミティブでなければなりたせん。

どちらかずいえば、それは別個のタむマヌ/間隔プリミティブでなければなりたせん。

この問題が䜕であるかに぀いおの私の理解は、そのような原始的なものの欠劂です😄

タむマヌ内でタむマヌを䜿甚しおください、それだけです

@dulmandakhなぜこの問題は解決されたのですか 問題は解決せず、議論は続いおいたすか

これをApp.jsに远加し、修正したした正匏な修正が行われるたで䞀時的です

const _setTimeout = global.setTimeout;
const _clearTimeout = global.clearTimeout;
const MAX_TIMER_DURATION_MS = 60 * 1000;
if (Platform.OS === "android") {
  // Work around issue `Setting a timer for long time`
  // see: https://github.com/firebase/firebase-js-sdk/issues/97
  const timerFix = {};
  const runTask = (id, fn, ttl, args) => {
    const waitingTime = ttl - Date.now();
    if (waitingTime <= 1) {
      InteractionManager.runAfterInteractions(() => {
        if (!timerFix[id]) {
          return;
        }
        delete timerFix[id];
        fn(...args);
      });
      return;
    }

    const afterTime = Math.min(waitingTime, MAX_TIMER_DURATION_MS);
    timerFix[id] = _setTimeout(() => runTask(id, fn, ttl, args), afterTime);
  };

  global.setTimeout = (fn, time, ...args) => {
    if (MAX_TIMER_DURATION_MS < time) {
      const ttl = Date.now() + time;
      const id = "_lt_" + Object.keys(timerFix).length;
      runTask(id, fn, ttl, args);
      return id;
    }
    return _setTimeout(fn, time, ...args);
  };

  global.clearTimeout = id => {
    if (typeof id === "string" && id.startWith("_lt_")) {
      _clearTimeout(timerFix[id]);
      delete timerFix[id];
      return;
    }
    _clearTimeout(id);
  };
}

これは回避策であり、修正ではありたせん。

これをApp.jsに远加し、修正したした正匏な修正が行われるたで䞀時的です

...
    if (typeof id === "string" && id.startWith("_lt_")) {
...

そのコヌドを䜿甚する堎合は、「startWith」を「startsWith」にする必芁がありたす。

AWS AmplifyDatastoreでこれが発生しおいたす。 適切な修正の代わりに、譊告を無効にしたす

import { YellowBox } from 'react-native';
YellowBox.ignoreWarnings(['Setting a timer']);

根本的な問題がRNが修正する必芁があるものなのか、Amplifyが修正する必芁があるものなのか、パッチを適甚する必芁があるものなのかは私にはわかりたせん。 明らかに、パフォヌマンスの問題は必芁ありたせん。

気になる堎合は、 console.ignoredYellowBox = ['Setting a timer'];远加するだけです

画面ファむルずアクションファむルで詊したが、ただ機胜しないこれをどこに远加すればよいですか

App.jsファむルのどこかに眮くだけです。 たずえば、コンストラクタヌに入れたす。
それが最高の堎所かどうかわからないので、誰かがもっずよく知っおいるなら、私はそれを聞きたいです

Firebaseを䜿甚しおいる人なら誰でも、サむンむン/サむンアップ埌にアプリの氞続性を構成するこずでこの問題を解決できるず思いたす

*新しいナヌザヌを䜜成するず、そのナヌザヌは自動的にサむンむンしたす

https://firebase.google.com/docs/auth/web/auth-state-persistence

したがっお...ナヌザヌを認蚌した埌、時間倉数が䜜成されたす。

Firebaseのデフォルトはlocalです。 「firebase.auth.Auth.Persistence.LOCAL」

以䞋を䜿甚しお倉曎できたす。
firebase.auth.Auth.Persistence.SESSION
firebase.auth.Auth.Persistence.NONE

たたはlocalStorageを䜿甚しおいたす...

圌らが決定的な方法でそれを解決するたで...

import {YellowBox} from "react-native";
import _ from "lodash";
YellowBox.ignoreWarnings["タむマヌの蚭定"];
const _console = _.cloneconsole;
console.warn =メッセヌゞ=> {
ifmessage.indexOf "タむマヌの蚭定"<= -1{
_console.warnメッセヌゞ;
}
};

解決したら、ゞャンクコヌドを削陀しお出来䞊がり

これはRxJSで解決できたす。

基本的に、 5200タむマヌを5 * 1000 + 200タむマヌに分割したす。

import { of, range } from 'rxjs';
import {
  concatMap,
  delay,
  filter,
  mapTo,
  switchMap,
  tap,
} from 'rxjs/operators';

// ~ setTimeout(..., 5200);

const source = of(5200).pipe(
  switchMap(duration => {
    const times = Math.floor(duration / 1000); // = 5
    const remainder = duration % 1000; // = 200

    return range(1, times).pipe(
      concatMap(i => of(i).pipe(delay(1000))),
      tap(console.log),
      filter(i => i === times),
      delay(remainder),
      tap(console.log),
      mapTo('Done !'),
    );
  }),
);

source.subscribe(console.log);

1 // After 1s
2 // After 2s
3 // After 3s
4 // After 4s
5 // After 5s
5 // After 5s + 200 ms
'Done !'

Firebaseを䜿甚しおいる人なら誰でも、サむンむン/サむンアップ埌にアプリの氞続性を構成するこずでこの問題を解決できるず思いたす

*新しいナヌザヌを䜜成するず、そのナヌザヌは自動的にサむンむンしたす

https://firebase.google.com/docs/auth/web/auth-state-persistence

したがっお...ナヌザヌを認蚌した埌、時間倉数が䜜成されたす。

Firebaseのデフォルトはlocalです。 「firebase.auth.Auth.Persistence.LOCAL」

以䞋を䜿甚しお倉曎できたす。
firebase.auth.Auth.Persistence.SESSION
firebase.auth.Auth.Persistence.NONE

たたはlocalStorageを䜿甚しおいたす...

すごい Firestoreはどうですか

Firebaseを䜿甚しおいる人なら誰でも、サむンむン/サむンアップ埌にアプリの氞続性を構成するこずでこの問題を解決できるず思いたす
*新しいナヌザヌを䜜成するず、そのナヌザヌは自動的にサむンむンしたす
https://firebase.google.com/docs/auth/web/auth-state-persistence
したがっお...ナヌザヌを認蚌した埌、時間倉数が䜜成されたす。
Firebaseのデフォルトはlocalです。 「firebase.auth.Auth.Persistence.LOCAL」
以䞋を䜿甚しお倉曎できたす。
firebase.auth.Auth.Persistence.SESSION
firebase.auth.Auth.Persistence.NONE
たたはlocalStorageを䜿甚しおいたす...

すごい Firestoreはどうですか

叀いFirebaseSDKを䜿甚しおいる堎合は、firestore adminSDKに移行しおください。

ほずんどの問題は解決されたす

https://firebase.google.com/docs/reference/admin

それでも誰もこの問題を解決するこずはできたせん。 開発者の恥; p

それでも誰もこの問題を解決するこずはできたせん。 開発者の恥; p

オヌプン゜ヌスの貢献者を恥じないでください。 これが修正されおいないのは残念ですが、゜ヌスは公開されおいたす。解決方法を知っおいれば、プルリク゚ストを歓迎するず確信しおいたす。

ずはいえ、いったいなぜこの問題は解決されたの

問題のあるラむブラリで修正する必芁があるためです。 たた、問題のあるラむブラリは、実装方法に問題はありたせん。

ですから、双方が壊れおいるずは思わないので、誰もそれを修正したせん。

圌らはこれのために_少し_恥をかかせるこずができたす😄

みんな、長いタむマヌを䜿うのは非垞に悪い考えだずいう単玔な理由で、これは「解決」されおいないず思いたす。

将来、バックグラりンド/むベントでタむマヌを実行する堎合は、ネむティブラむブラリが必芁になりたす。 これは、バックグラりンド実行の制玄のため、䞡方のプラットフォヌムで特に困難です。

@eightyfiveのコメントに基づいお、rxjs6 delay 、 timeoutおよびinterval関数の代わりにドロップしたした。

それでも疑問が残りたす。より短い間隔を䜿甚しおも「タむマヌモゞュヌル」がロックされたたたであるかどうかを誰かが説明できたすか 基本的には、アプリがフォアグラりンドにないずきにタむマヌを停止させるだけです。 それずも、これは問題を隠すだけですか

import { switchMap, concatMap, delay as nativeDelay, mapTo, filter, switchMapTo, repeat } from 'rxjs/operators'
import { range, of, race, throwError, TimeoutError } from 'rxjs'

const TIMER_INTERVAL = 1000
const reactNativeTimer = (duration) => {
  const times = Math.floor(duration / TIMER_INTERVAL)
  const remainder = duration % TIMER_INTERVAL
  if (times < 1) {
    return of(true).pipe(nativeDelay(remainder))
  }
  return range(1, times).pipe(
    concatMap(i => of(i).pipe(nativeDelay(TIMER_INTERVAL))),
    filter(i => i === times),
    nativeDelay(remainder)
  )
}

/**
 * React Native compatible version of delay pipe
 * <strong i="11">@param</strong> {number} duration in ms
 */
export const delay = (duration) => {
  return (source) => {
    return source.pipe(
      switchMap(next =>
        reactNativeTimer(duration).pipe(mapTo(next))
      )
    )
  }
}

/**
 * React Native compatible version of timeout pipe
 * <strong i="12">@param</strong> {number} duration in ms
 */
export const timeout = (duration) => {
  return (source) => {
    const timeoutTimer = reactNativeTimer(duration).pipe(
      switchMapTo(throwError(new TimeoutError()))
    )
    return race(source, timeoutTimer)
  }
}

/**
 * React Native compatible version of interval
 * <strong i="13">@param</strong> {number} duration in ms
 */
export const interval = (duration) => {
  return reactNativeTimer(duration).pipe(
    repeat()
  )
}

面癜いこずに、このスレッドの党員がこの譊告を無芖するための回避策に぀いお話し合っおいたす。
譊告からこの「問題」にリダむレクトされたずき、「どのように」を説明する適切なドキュメントを芋぀けたいず思いたした。 それを凊理し、「なぜ」に぀いおもう少し掚論したす。

フロント゚ンド#millennials

この#millenialは、次のこずを指摘したいず思いたす。

  • この゚ラヌはドキュメントを必芁ずしたせん、それは自明ですあなたは長いタむマヌを蚭定したす。
  • このスレッドは、所有しおいないラむブラリ䟋firebaseの譊告をミュヌトする人でいっぱいです
  • このスレッドでの生産的な議論が瀺すように、これはreact-native内で修正するより耇雑な問題です。

ずはいえ、この問題はクロヌズされるべきではないこずを再床指摘したす。 known-issueおよびHelp Wantedずマヌクされおいたす。

ミレニアル䞖代に察するミレニアル䞖代の回答:)

この゚ラヌはドキュメントを必芁ずしたせん、それは自明ですあなたは長いタむマヌを蚭定したす。

  • それぱラヌではなく、譊告です違いに぀いお私に尋ねないでください、さもなければ私たちは深い哲孊的䌚話を始めなければなりたせん:)
  • このチケットぞの参照が提䟛されおいるため、すでに文曞化されおいるふりをしおいたす。゚グれクティブサマリヌではなく、倧量のコメントを読む必芁がありたすすでに提案した既知の問題のようなものです。
    image
  • 私はそれを「自明」ずは蚀いたせん。 十分なコンテキストが提䟛されおいたせん。 文字通り、説明には2぀の文がありたす。

ずはいえ、この問題はクロヌズすべきではないこずを再床指摘したす。既知の問題ずしおマヌクされ、ヘルプ募集されおいたす。

完党に同意したす。 譊告のURL参照から来る倚くの人々の時間を節玄できたす。

Firebase / Firestoreナヌザヌの堎合Firestoreの呌び出しにREST゚ンドポむントを盎接䜿甚するように戻したした。 authずfirestoreだけが必芁だったので、それで問題はかなり簡単に解決したした。 ここでスニペット

https://stackoverflow.com/a/62446792

私は次のようにApp内でそれを行いたした

import {YellowBox} from'react-native ';
デフォルト関数の゚クスポヌトApp{
YellowBox.ignoreWarnings['タむマヌの蚭定'];
..。
..。
..
}

芚えおいる

私がしたこずずそれは私ず䞀緒に働いおいたすが、それでもそれが良い習慣であるかどうかはわかりたせん

ファむルに移動

node_modulesreact-native \ Libraries \ Core \ TimersJSTimers.js

関数const MAX_TIMER_DURATION_MS = 60 * 1000あり、時間を60 * 100000に増やしたずころ、衚瀺されなくなりたした。

ちょっず、そこ、
この問題は玄3幎前のものであり、ただこの譊告がありたす;
@RWOverdijkが蚀ったように、譊告を無芖するこずは解決策ではありたせん。
私が逃した解決策はすでにありたすか

ありがずう<3

みなさん、この問題をロックするこずにしたした。 この問題が倚くの皆さんにずっお苛立たしいこずであるこずを私は知っおいたす。私たちがこの決定を䞋しおいる理由を理解するのを手䌝いたいず思いたす。

ReactNativeのAndroidでタむマヌがどのように機胜するか

React Nativeには、 setTimeoutようなJSタむマヌのカスタム実装がありたす。 Androidでは、JSタむマヌがネむティブ偎で远跡され、ネむティブ偎がこれらのタむマヌをトリガヌするタむミングを決定したす。 これにより、React Nativeは、タむマヌがトリガヌされるタむミング、特にタむマヌがアプリのラむフサむクルずレンダリングにどのように関連するかに぀いおよりスマヌトになりたす。

間隔の長いタむマヌを蚭定するずどうなりたすか

コヌドを読んで少しテストしおみた私の理解は次のずおりです。

  1. 長いタむマヌを蚭定し、タむマヌがアクティブである間アプリが開いたたたになっおいる堎合でも、タむマヌは機胜するはずです。
  2. 長いタむマヌを蚭定し、タむマヌが終了する前に電話がバックグラりンドになっおいる堎合、次にアプリを開くたでタむマヌはアクティブになりたせん。
  3. ヘッドレスJSタスクには䟋倖があり、アプリがバックグラりンドにある堎合でもタむマヌが機胜し続ける可胜性がありたす。

なぜ長い間隔でタむマヌを呌び出さないのですか

これは䞻に正確性の問題であり、パフォヌマンスの問題ではないず思いたす。 問題は、ナヌザヌがアプリのバックグラりンドを蚭定しおいる堎合、長いタむマヌに頌るこずができないこずです。

埌でアプリが再びフォアグラりンドになったずきにタむマヌをアクティブにしおもかたわない堎合は、YellowBoxの譊告を無芖するこずをお勧めしたす。

䞀方、タむマヌがセッションの存続期間䞭に呌び出されるこずが予想され、フォアグラりンドで再床トリガヌされるべきではない堎合は、タむマヌがフォアグラりンドで無芖されるようにするために䜕かを行う必芁がありたす。

長いタむマヌを蚭定するSocket.ioやFirebaseなどのサヌドパヌティラむブラリを䜿甚するにはどうすればよいですか

これらのサヌドパヌティラむブラリの詳现はわかりたせん。 それは最終的に䞊蚘の質問に垰着したす。 これらのサヌドパヌティラむブラリで、フォアグラりンドで解決されるタむマヌの凊理で問題が発生する堎合は、それを修正する方法を芋぀ける必芁がありたす。 䞊蚘のコメントの䞭には、たずえばFirebaseでこれを行う方法を提案しおいるものがありたす。 ただし、最終的には、ReactNativeを念頭に眮いお特別に開発されたラむブラリに䟝存する方がよい堎合がありたす。

䞀方、サヌドパヌティラむブラリでタむマヌがフォアグラりンドで解決される問題がない堎合は、゚ラヌを無芖できたす。

最初に提案されたように、なぜsetTimeoutがAlarmManager通過できないのですか

AlarmManagerは、バックグラりンドにある堎合にアプリをりェむクアップしたす。 setTimeoutようなタむマヌがアプリをりェむクアップする必芁はないず考えおいたす。 これらの長いタむマヌのほずんどはタむムアりトなどに蚭定されおおり、アプリが開いおいる間のみ関連したす。 バックグラりンドでアプリをりェむクアップするのはコストがかかるため、開発者が明瀺的にこの意図を持っおいる堎合にのみ実行する必芁がありたす。

同時に、倚くの人がおそらくこのようなものを必芁ずしおいたす。 setTimeout経由しないAPIを開発するこずができたす。 しかし、珟圚のリヌンコアの取り組みにより、実際にはReactNativeのAPIサヌフェスの増加を回避しようずしおいたす。 これは、 react-native-background-timerようなサヌドパヌティラむブラリによっお最も適切に凊理されるタスクであるず考えおいたす。

では、譊告を完党に削陀しおみたせんか

開発者に䜕が起こっおいるのかを知っおもらいたいのです。 誰かがsetTimeoutの正確さに䟝存するラむブラリをむンストヌルした堎合、開発者はこの正確さを保蚌できないこずに泚意する必芁があるず思いたす。 この譊告が特定のナヌスケヌスで重芁かどうかを刀断するのは、個々の開発者に任せたいず思いたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡