【问题标题】:Android background service with Headless JS is not working带有 Headless JS 的 Android 后台服务无法正常工作
【发布时间】:2020-05-08 13:29:03
【问题描述】:

到目前为止我已经实现了:

MainApplication.java:

    @Override
    public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
    initializeFlipper(this); // Remove this line if you don't want Flipper enabled

    Intent service = new Intent(getApplicationContext(), MyTaskService.class);

    getApplicationContext().startService(service);
  }

MyTaskService.java:

package com.myApp;

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;
import javax.annotation.Nullable;
import com.facebook.react.bridge.WritableMap;

public class MyTaskService extends HeadlessJsTaskService {

   @Override
  protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) {

Bundle extras = intent.getExtras();
  WritableMap data = extras != null ? Arguments.fromBundle(extras) : null;
return new HeadlessJsTaskConfig(
    "SomeTaskName", // Use the registered headless Task here
    data,
    5000);
}
}

AndroidManifest.xml:

  <service android:name="com.myApp.MyTaskService" />

Index.js(React-Native 代码):

AppRegistry.registerHeadlessTask('SomeTaskName', () => SomeTaskName);

SomeTaskName.js(RN 代码):

    module.exports = async (taskData) => {
    alert('test');
    console.log('Went to background');
 }

使用此代码,它会运行但会立即关闭应用程序,并且不会显示任何错误。知道为什么会发生这种情况以及为什么我不能调用警报和 console.log 吗?

【问题讨论】:

  • 你解决了这个问题吗?
  • 你有没有找到任何解决方案。我也有完全相同的问题,没有什么对我有用。

标签: java android react-native background-process headless


【解决方案1】:

MainApplication.java文件中添加Intent,并在SoLoader.init()之前调用函数getApplicationContext()

【讨论】:

  • 仍然不适合我..我如何知道任务是否执行...无法控制台或无法发出警报语句?
【解决方案2】:

你错过了这个电话

HeadlessJsTaskService.acquireWakeLockNow(context)

根据文档要求:

如果您从 {@code 启动 {@code HeadlessJsTaskService} BroadcastReceiver}(例如*处理推送通知),确保 在从 * {@link 返回之前调用 {@link #acquireWakeLockNow} BroadcastReceiver#onReceive},以确保设备不会转到 * 服务启动前休眠。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-11
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    相关资源
    最近更新 更多