Java 带有Headless JS的Android后台服务不起作用
到目前为止,我已经实施了: MainApplication.java:Java 带有Headless JS的Android后台服务不起作用,java,android,react-native,background-process,headless,Java,Android,React Native,Background Process,Headless,到目前为止,我已经实施了: 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 Inten
@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);
}
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);
}
}
<service android:name="com.myApp.MyTaskService" />
AppRegistry.registerHeadlessTask('SomeTaskName', () => SomeTaskName);
MyTaskService.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);
}
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);
}
}
<service android:name="com.myApp.MyTaskService" />
AppRegistry.registerHeadlessTask('SomeTaskName', () => SomeTaskName);
AndroidManifest.xml:
@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);
}
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);
}
}
<service android:name="com.myApp.MyTaskService" />
AppRegistry.registerHeadlessTask('SomeTaskName', () => SomeTaskName);
SomeTaskName.js(注册代码):
module.exports = async (taskData) => {
alert('test');
console.log('Went to background');
}
使用此代码,它会运行,但会立即关闭应用程序,并且不会显示任何错误。你知道为什么会发生这种情况,为什么我不能调用alert and console.log吗?在
MainApplication.java
文件中添加Intent
,并在SoLoader.init()之前调用函数getApplicationContext()
行,你错过了这个调用
HeadlessJsTaskService.acquireWakeLockNow(context)
根据文件要求:
如果要从{@code-HeadlessJsTaskService}启动{@code-HeadlessJsTaskService}
BroadcastReceiver}(例如。*处理推送通知),请确保
在从*{@link返回之前调用{@link#acquireWakeLockNow}
BroadcastReceiver#onReceive},以确保设备不会转到
在*服务启动前睡眠
你解决问题了吗?还是不为我工作。。我怎样才能知道任务是否被执行。。。无法控制台或无法放置警报语句?