Gun*_*ner 5 android mobile-development react-native
我正在使用Headless.js通过React Native运行后台服务。我们在使用中面临很多问题。使用React Native运行Android后台服务有哪些选择?
Tim*_*Tim -3
我的猜测是你必须自己写。不幸的是,Headless JS 在任务完成后暂停,所以我不确定它是否合适。
您可以在任务中执行任何操作,只要不涉及 UI:网络请求、计时器等。一旦你的任务完成(即承诺得到解决),React Native 将进入“暂停”模式(除非有其他任务正在运行,或者有前台应用程序)。
https://facebook.github.io/react-native/docs/headless-js-android.html
更新:如果应用程序失去焦点,可以保持进程运行。我将不得不寻找测试应用程序源来提供示例。
顺便说一句,我最终在 Android 中编写了一个后台服务,以便在启动时启动。React Native 不允许这种类型的服务,RN 也无意创建完全无头的应用程序。应用程序注册表:
AppRegistry.registerHeadlessTask('SomeTaskName', () => require('SomeTaskName'));
Run Code Online (Sandbox Code Playgroud)
一些任务名称.js:
module.exports = async (taskData) => {
// do stuff
};
Run Code Online (Sandbox Code Playgroud)
Java API:
public class MyTaskService extends HeadlessJsTaskService {
@Override
protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
return new HeadlessJsTaskConfig(
"SomeTaskName",
Arguments.fromBundle(extras),
5000, // timeout for the task
false // optional: defines whether or not the task is allowed in foreground. Default is false
);
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml
<service android:name="com.example.MyTaskService" />
Run Code Online (Sandbox Code Playgroud)
例子:
Intent service = new Intent(getApplicationContext(), MyTaskService.class);
Bundle bundle = new Bundle();
bundle.putString("foo", "bar");
service.putExtras(bundle);
getApplicationContext().startService(service);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2465 次 |
| 最近记录: |