我在android studio中构建简单的服务,以便在控制台日志中每秒运行一次服务,
我想在反应原生
中实现我的android studio代码有办法吗?
假设我有一个代码:
myService.class
public class myService extends Service {
private Handler handler= new Handler();
private boolean run = true;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onStart(Intent i, int startId){
super.onStart(i, startId);
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (run){
Log.e("Second", "test");
}
handler.postDelayed(this,1000);
}
},1000);
}
public void onDestroy(){
super.onDestroy();
run=false;
Log.d("Test", "Screen on");
}
}
MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onPause() {
super.onPause();
Log.d("Test", "Screen off");
startService(new Intent(this, myService.class));
}
@Override
protected void onResume() {
super.onResume();
startService(new Intent(this, myService.class));
}
}
答案 0 :(得分:1)
您可以使用RN Native模块。对于后台任务,Headless JS
非常有用。对于收听事件,LifecycleEventListener
是您想要的。 getReactApplicationContext().startService(new Intent(getReactApplicationContext(), myService.class)
将完成其余的工作。我已经准备好进一步的帮助
请参阅https://facebook.github.io/react-native/docs/native-modules-android
答案 1 :(得分:0)
您可以关注文档:https://facebook.github.io/react-native/docs/native-modules-android
另一个答案几乎涵盖了实现RN模块的方式。一个有用的技巧是如何将事件发送到JavaScript,如下所示:
private void sendEvent(ReactContext reactContext,
String eventName,
@Nullable WritableMap params) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
...
WritableMap params = Arguments.createMap();
...
sendEvent(reactContext, "keyboardWillShow", params);
有关后台任务的更多阅读(针对您的预期功能)[ANDROID]
只需添加一下,您似乎想在React Native中创建一个后台任务。现在,根据经验,如果您想每秒运行某件东西,它将按预期运行,直到设备进入打ze模式。如果您不希望该服务在后台或打ze模式下运行-很好。如果是这样,您可能想开始阅读有关打ze模式以及如何在打ze模式环境中测试服务的信息。
后台任务的问题是,如果电话空闲或处于静止状态,电话将进入打ze模式。这会影响某些功能,例如网络。如果需要以打Do模式执行操作,可以在维护窗口
中执行现在,我设法解决了一些问题-通过使用闹钟管理器并将其重置为停止打ze模式。但是,这并非在所有情况下都有效。您需要将其与一项服务结合起来以保持它的生命(但是在许多手机上的行为会有所不同)。有时,GC只会将其关闭并杀死进程。
有用的链接:
在打ze模式下测试服务:
https://developer.android.com/training/monitoring-device-state/doze-standby#testing_doze
打Do睡:
https://developer.android.com/training/monitoring-device-state/doze-standby#understand_doze