2016-01-08 33 views
33

アンドロイドの反応ネイティブでバックグラウンドサービスを作成する方法はありますか? 私は毎時間何時間も起きて、シンプルなjavascriptタスクを起動する何らかのタイマーを望みます。反応ネイティブのアンドロイドのバックグラウンドサービス

+0

解決策は見つかりましたか? – Sriraman

+0

私も知りたい:あなたは解決策を見つけましたか? –

+3

いいえ、私は回避策がありました。私は、Javaでバックグラウンドサービスを作成します。これは、reactContext.getJSModule(...)でjavascriptコードを呼び出します。emit( 'javascript_event_name'、params) 反応ネイティブで直接利用可能なサービスはありませんAPI。 – andri

答えて

9

はい、できます。

Reactネイティブはネイティブ(Java/Objc)からJSブリッジの上で "ネイティブ" JSモジュールの概念で動作します(モジュールにはブリッジの「他の」側から呼び出すことができるメソッドがあります)。すべてのUIのものはブリッジの上に構築されています(ビューの生成を処理するメインの "ネイティブ"モジュールは "UIManager"と呼ばれます)。ブリッジを直接使用することは可能ですが、唯一の制限は通信が非同期でなければならないことです。

JAVAコードからjavascript関数を呼び出すことができます。ドキュメントについてはCheck this linkを参照してください。

+1

はい。それが私がやったことです。コアAPIには含まれていません。 – andri

+4

こんにちは@andri、あなたは十分に要点をスニペットを共有することができますか?参照用のレポがある場合はそれ以上のものが必要です。 :D – holyxiaoxin

7

リリースv0.36リリースヘッドレスjs、Androidのみ。絶対に

https://facebook.github.io/react-native/docs/headless-js-android.html

+0

ヘッドレスタスクでネイティブモジュールのメソッドを呼び出すことは可能ですか? 数時間後に反応ブリッジが眠っている(ドーズモード)ため、JSからのネイティブコールは、デバイスが起動するまで保留状態になっているようです。 私のネイティブプレーヤーが前のプレイヤーを終了すると、私はプレイリストの次のトラック(Javascript側)を再生したいと思います。私は私のネイティブモジュールから "play(nextSong)"を呼び出すJSに通知するヘッドレスタスクを使用しています。しかし、ネイティブ関数は、私がデバイスを起動するまで実行されません。 –

2

。実際には、これを完全にJS(ネイティブコードを書く必要はありません)でreact native queuereact native background taskのクロスプラットフォームで完全に達成するのは簡単です。

いくつかの制限があります。バックグラウンドタスクは、最小間隔で約15分ごとにのみ起動されます(タイミングは完全には保証されません - iOS/Androidスケジューラはバッテリ寿命、電流スケジュールされたタスクを起動するタイミングを決定するときにCPU負荷など)。また、タスクは30秒に制限されています。

I've written a tutorial on how to set all this up here

起動して実行するのが難しい場合は教えてください。

関連する問題