作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Android WorkManager 创建一个 React Native 后台同步任务。 WorkManager 类中的 doWork 方法会定期正确调用。我面临的问题是如何从 doWork 方法调用 react native 函数。
在我当前的实现中,没有调用 JavaScript 函数。
React Native 中的 headless 任务
// index.js
AppRegistry.registerHeadlessTask('SyncHeadlessTask', () => SyncHeadlessTask);
// SyncHeadlessTask.js
module.exports = async (taskData) => {
console.log('task running');
};
我在 Java 中的 HeadlessTask
public class SyncHeadlessTaskService extends HeadlessJsTaskService {
@Override
protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
return new HeadlessJsTaskConfig(
"SyncHeadlessTask",
Arguments.fromBundle(extras),
10000, // timeout for the task
true // optional: defines whether or not the task is allowed in foreground. Default is false
);
}
return null;
}
}
我的 worker
public class SyncWorker extends Worker {
private static final String TAG = "SyncWorker";
public SyncWorker(@Nonnull Context context, @Nonnull WorkerParameters workerParams) {
super(context, workerParams);
}
@Nonnull
@Override
public Result doWork() {
return Result.success();
}
}
我的模块
public class SyncModule extends ReactContextBaseJavaModule {
private static final String MODULE_NAME = "SyncManager";
private Context mContext;
private PeriodicWorkRequest workRequest;
private static final String TAG = "SyncModule";
SyncModule(@Nonnull ReactApplicationContext reactContext) {
super(reactContext);
mContext = reactContext;
workRequest = new PeriodicWorkRequest.Builder(SyncWorker.class, 15, TimeUnit.MINUTES).build();
}
@ReactMethod
public void startSync() {
WorkManager.getInstance().enqueueUniquePeriodicWork("SyncWork", ExistingPeriodicWorkPolicy.KEEP, workRequest);
}
@ReactMethod
public void stopSync() {
WorkManager.getInstance().cancelUniqueWork("SyncWork");
}
@Nonnull
@Override
public String getName() {
return MODULE_NAME;
}
}
我的包裹
public class SyncPackage implements ReactPackage {
@Nonnull
@Override
public List<NativeModule> createNativeModules(@Nonnull ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new SyncModule(reactContext));
return modules;
}
@Nonnull
@Override
public List<ViewManager> createViewManagers(@Nonnull ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
最佳答案
您需要将任务作为服务启动:
@Nonnull
@Override
public Result doWork() {
Intent service = new Intent(getApplicationContext(), SyncHeadlessTaskService.class);
Bundle bundle = new Bundle();
bundle.putString("foo", "bar");
service.putExtras(bundle);
getApplicationContext().startService(service);
return Result.success();
}
不要忘记配置您的 AndroidManifest:
<service android:name="your.package.SyncHeadlessTaskService" />
关于android - 使用 android WorkManager 响应 Native HeadlessJs 任务调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65547466/
我正在使用 Android WorkManager 创建一个 React Native 后台同步任务。 WorkManager 类中的 doWork 方法会定期正确调用。我面临的问题是如何从 doWo
我是一名优秀的程序员,十分优秀!