gpt4 book ai didi

react-native - React Native - headless JS 示例

转载 作者:行者123 更新时间:2023-12-03 09:26:53 26 4
gpt4 key购买 nike

关于此的 react native 文档似乎不完整。我正在遵循本指南,但似乎并没有将我带到任何地方:

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

我应该把 .java 文件放在哪里?
我应该如何开始任务?

最佳答案

我遇到了和你一样的问题。我是原生 Android 开发人员的新手,我遵循了文档,但它们对我不起作用。原来我误解了,并认为我可以从我的 react native 代码开始实际任务。但是,它不是那样工作的。您编写了要在任务启动时运行的 JavaScript 代码,但您需要从 native 代码启动该任务。因此,您已经执行的步骤是设置任务,但没有告诉他们开始。
我将以我的项目为例:
在我的 JavaScript 中:

    /* 
This code basically registers WHAT javascript code
I want to call when the 'disconnect' service is started
*/

const disconnectTask = () => async () => {
if (connectionIsActive) {
user.goOffline();
}
};

AppRegistry.registerHeadlessTask('disconnect', disconnectTask);
然后我在这里创建了java文件:
projectroot/android/app/src/main/java/com/mycompany/app/ForceOfflineService.java
package com.mycompany.app;
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 com.facebook.react.bridge.WritableMap;
import javax.annotation.Nullable;

public class ForceOfflineService extends HeadlessJsTaskService {
@Override
@Nullable
protected HeadlessJsTaskConfig getTaskConfig(Intent intent) {
Bundle extras = intent.getExtras();
// WritableMap data = extras != null ? Arguments.fromBundle(extras) : null;

// ---- EDIT ---- the line above no longer works, since null is not an accepted value anymore.
WritableMap data = extras != null ? Arguments.fromBundle(extras) : Arguments.createMap();

// Make sure that the string below ("disconnect" in this case)
// matches the string used to register the task in your JS

return new HeadlessJsTaskConfig(
"disconnect",
data,
5000);
}
}
然后在你的android list 里面
(我的在这里:projectroot/android/app/src/main/AndroidManifest.xml)
您必须在应用程序标签内注册服务
<manifest>
<application>

<!-- other existing configuration -->

<service android:name=".ForceOfflineService" />
</application>
</manifest>
最后,您需要使用 native 代码来启动服务。在我的 MainActivity.kt 中,我在调用 onStop 生命周期 Hook 时启动服务:
 override fun onStop() {
super.onStop()

Handler(Looper.getMainLooper()).postDelayed(Runnable {
val service = Intent(applicationContext, ForceOfflineService::class.java)
applicationContext.startService(service)
}, IDLE_TIME_BEFORE_DISCONNECT)
}
就是这样!

关于react-native - React Native - headless JS 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41767036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com