2016-11-24 32 views
3

我正在使用Headless.js与React Native一起运行后台服务。我们在使用中遇到了很多问题。使用React Native运行Android后台服务有哪些选择?React Native和Android后台服务

回答

0

我的猜测是你将不得不自己写。不幸的是,Headless JS在任务完成时暂停,所以我不确定它是否合适。

只要不接触用户界面:网络请求,定时器等,您可以在任务中执行任何操作。一旦您的任务完成(即承诺已解决),React Native将进入“已暂停”模式(除非有其他任务正在运行,或者有前台应用程序)。

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

更新:它可以保持运行的过程中,如果应用程序失去焦点。我将不得不寻找测试应用程序源,以提供一个示例。

顺便说一下,我最终编写了一个后台服务,以便在Android中启动。 React Native不允许使用这种类型的服务,也不是RN的意图来创建完全无头的应用程序。

+0

plz添加一些代码链接可能会在一段时间内死掉 –

+0

_鼓励连接到外部资源,但请在链接周围添加上下文,以便您的同行用户可以了解它是什么以及它为什么存在。始终引用重要链接中最相关的部分,以防目标网站无法访问或永久脱机._ – Bugs

0

添加一个文件名BackgroundAudio.java

import android.content.Intent; 
import android.os.Bundle; 

import com.facebook.react.HeadlessJsTaskService; 
import com.facebook.react.bridge.Arguments; 
import com.facebook.react.jstasks.HeadlessJsTaskConfig; 

public class BackgroundAudio extends HeadlessJsTaskService { 

    @Override 
    protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) { 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 
      return new HeadlessJsTaskConfig(
        "BackgroundAudio", 
        Arguments.fromBundle(extras), 
        5000); 
     } 
     return null; 
    } 
} 

编辑AndroidManifest.xml中

<service android:name=".BackgroundAudio" android:enabled="true" android:label="BackgroundAudio" /> 
我index.android.js

然后:

import BackgroundAudio from './src/BackgroundAudio' 
AppRegistry.registerHeadlessTask('BackgroundAudio',() => BackgroundAudio) 

最后,BackgroundAudio.js在index.android.js中引用的文件的内容如下:

export async function BackgroundAudio (taskData) { 
    alert('BACKGROUND AUDIO') 
} 
+0

如何启动** BackgroundAudio **服务 – Man

0

有几个包自创建以来就已经创建,因为您问这个问题可能会有所帮助,具体取决于您的确切用例。

具体来说,你可以使用react native queuereact native background task轻松安排后台任务定期(大约每隔〜15分钟,你的计划任务至多运行30秒 - 使用队列来处理任务超时管理)时执行的程序是关闭(这适用于iOS和Android的跨平台)。但是,如果您的意图是要在后台持续运行一项服务,我不确定这在RN世界中是否可行(就我的职位而言)。