当前位置: 首页 > 知识库问答 >
问题:

React Native-如何从mainactivity.java向RN发出事件?

全弘深
2023-03-14

在React本机AppState库中:
iOS有三种状态背景->非活动->活动
Android只有背景->活动

当一个Android应用完全后台化时,主要活动从onPause->onStop

当有系统通知(例如在应用程序购买)时,它将转到onPause

当应用程序从后台到前台时,我需要运行一些代码
onstop->onResume

如果应用程序由于系统通知
onpause->onResume而短暂暂停,我不希望它运行

这可能吗?React的生命周期事件没有onHostStop

我尝试为每个activity生命周期事件从MainActivity发出一个事件,但这导致应用程序崩溃,出现空指针异常。

甚至有可能从MainActivity发出一个事件来对本机作出反应吗?

谢谢

编辑添加的代码以显示从MainActivity发出事件的尝试

mainactivity.java片段

import com.facebook.react.ReactActivity;
import com.facebook.react.modules.core.DeviceEventManagerModule;

public class MainActivity extends ReactActivity {

    DeviceEventManagerModule.RCTDeviceEventEmitter eventEmitter;

    @Override
    public void onStop() {
        super.onStop();
        eventEmitter.emit("onStop", "ActivityonStop");
    }
}

自然反应

const nativeEventListener = DeviceEventEmitter.addListener('onStop',
  (e)=>{
    console.log("NATIVE_EVENT");
    dispatch({type: "NATIVE_EVENT"})
})

logcat中的错误

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.realer.android, PID: 15251
java.lang.RuntimeException: Unable to stop activity {com.realer.android/com.realer.android.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void com.facebook.react.modules.core.DeviceEventManagerModule$RCTDeviceEventEmitter.emit(java.lang.String, java.lang.Object)' on a null object reference
   at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3837)
   at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3886)
   at android.app.ActivityThread.-wrap25(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1494)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6077)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void com.facebook.react.modules.core.DeviceEventManagerModule$RCTDeviceEventEmitter.emit(java.lang.String, java.lang.Object)' on a null object reference
   at com.realer.android.MainActivity.onStop(MainActivity.java:40)
   at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1289)
   at android.app.Activity.performStop(Activity.java:6839)
   at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3834)
   at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3886) 
   at android.app.ActivityThread.-wrap25(ActivityThread.java) 
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1494) 
   at android.os.Handler.dispatchMessage(Handler.java:102) 
   at android.os.Looper.loop(Looper.java:154) 
   at android.app.ActivityThread.main(ActivityThread.java:6077) 
   at java.lang.reflect.Method.invoke(Native Method)

共有1个答案

缑修齐
2023-03-14

尝试像这样更新mainactivity.java:

public class MainActivity extends ReactActivity {

    @Override
    public void onStop() {
        super.onStop();

        WritableMap params = Arguments.createMap(); // add here the data you want to send
        params.putString("event", "ActivityonStop"); // <- example

        getReactInstanceManager().getCurrentReactContext()
                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit("onStop", params);
    }
}

如果能行就告诉我。在我的应用程序中,我通常从一个扩展ReactContextBaseJavaModule的类发送事件,在这个类中,我可以只通过调用GetReactApplicationContext()来访问上下文,但如果您可以从ReactInstanceManager获得ReactContext的话,这似乎是可行的。

 类似资料:
  • 嗨,我正在尝试从PHP向socketio服务器发出事件。这两个叉子我都试过了: https://github.com/rase-/socket.io-php-emitter https://github.com/ashiina/socket.io-php-emitter 你知道我做错了什么吗?

  • 问题内容: 如何从工厂或服务发出事件。我无法将$ scope注入工厂,因此无法发出事件。 我收到以下错误- 谢谢,Murtaza 问题答案: 您不能将控制器的作用域注入服务。您可以做的是: 将范围实例作为参数传递给您的服务功能之一: 例如 将$ rootScope注入到您的服务中: 例如

  • 我的程序目的:触发服务中的BACK按钮 我尝试了很多方法,没有人能达到这个目的,最后我发现了AccessibilityService,它可能是实现这个功能的最可能的方法。 我创建了这个AccessibilityService,并测试它是否正常工作 然后我尝试将移动到服务,但它不执行操作。 我也尝试以不同的方式发送自定义事件,但没有人可以发送到MyAccessibilityService 如何向My

  • 我试图从java向一个现有的RESTful服务发出一个< code>POST请求,以便获得json响应并将其存储在一个字符串中。 让我们假设RESTful Service Url如下所示: 这是一种带有产品的商店,您想要搜索商品。为了进行搜索,您还必须发送, 如下所示: 为了发布这篇文章,我在java中实现了以下方法: 例外情况如下: 我不知道为什么我会得到这个例外,但如果你有一个想法或者你也面临

  • 在KafkaStream中,当实现ValueTransformer或ValueTransformerWithKey时,在transform()调用时,我会安排一个新的标点器。当执行标点器的标点()方法时,我希望它使用上下文实例向下游转发事件。然而,作为DSL拓扑的一部分,上下文实例似乎没有定义。 有没有关于如何使用变压器的线索? 在处理器中使用相同的逻辑,实现其工作的底层处理器拓扑。 在Value

  • 新建一个React Native工程,参考React Native 官网 react-native init hello cd hello yarn add baidumobstat-react-native react-native link 进入新建的目录,打开ios目录下的hello.xcodeproj工程,在iOS工程的Linked Frameworks and Libr