尝试在Chrome中调试时,React Native Android崩溃

时间:2015-12-18 19:05:53

标签: android react-native

我有一个适用于iOS的React Native应用程序,我正在尝试为Android启动并运行它。我已经在模拟器中启动并运行了应用程序,我想在Chrome中调试它以找出一些问题。

当我打开应用程序开发工具并单击“在Chrome中调试”选项时,应用程序崩溃了几秒钟就会出现问题,我收到一条警告消息“不幸的是MyApp已停止”。然后,应用程序重新启动红色屏幕并显示“无法连接远程调试器”。

我相信我按照指示on this page设置了所有内容。

有没有人见过这种问题,如果有的话有办法解决它?

谢谢!

3 个答案:

答案 0 :(得分:2)

Android上的问题相同。我刚刚开始了react-native init的项目,并开始关注Facebook教程。

当我在没有调试的情况下运行应用程序时,它运行正常。如果我启用远程调试JS ,它会在1分钟后崩溃(无所事事)。

在三星Galaxy S5上测试,react-native-cli 0.2.0,反应原生0.32.1,Windows 7,Chrome 53。

在Android Studio中,我发现了这个堆栈跟踪:

09-08 13:25:06.322 31080-3735/com.tutorialproject W/libc: pthread_create failed: couldn't allocate 1064960-byte stack: Out of memory
09-08 13:25:06.322 31080-3735/com.tutorialproject E/art: Throwing OutOfMemoryError "pthread_create (1040KB stack) failed: Try again"
09-08 13:25:06.332 31080-3735/com.tutorialproject E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
    Process: com.tutorialproject, PID: 31080
    java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Try again
        at java.lang.Thread.nativeCreate(Native Method)
        at java.lang.Thread.start(Thread.java:1063)
        at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:920)
        at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1338)
        at okhttp3.ConnectionPool.put(ConnectionPool.java:135)
        at okhttp3.OkHttpClient$1.put(OkHttpClient.java:149)
        at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:188)
        at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:129)
        at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:98)
        at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
        at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
        at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
        at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:124)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
        at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:170)
        at okhttp3.RealCall.access$100(RealCall.java:33)
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:120)
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)
09-08 13:25:06.372 31080-31080/com.tutorialproject D/SensorManager: unregisterListener ::   
09-08 13:25:06.852 31080-31185/com.tutorialproject W/unknown:React: Tried to enqueue runnable on already finished thread: 'native_modules... dropping Runnable.
09-08 13:25:06.852 31080-31185/com.tutorialproject W/MessageQueue: Handler (com.facebook.react.bridge.queue.MessageQueueThreadHandler) {246b7490} sending message to a Handler on a dead thread
       java.lang.IllegalStateException: Handler (com.facebook.react.bridge.queue.MessageQueueThreadHandler) {246b7490} sending message to a Handler on a dead thread
           at android.os.MessageQueue.enqueueMessage(MessageQueue.java:325)
           at android.os.Handler.enqueueMessage(Handler.java:631)
           at android.os.Handler.sendMessageAtTime(Handler.java:600)
           at android.os.Handler.sendMessageDelayed(Handler.java:570)
           at android.os.Handler.post(Handler.java:326)
           at com.facebook.react.bridge.queue.MessageQueueThreadImpl.runOnQueue(MessageQueueThreadImpl.java:61)
           at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
           at android.os.Handler.handleCallback(Handler.java:739)
           at android.os.Handler.dispatchMessage(Handler.java:95)
           at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
           at android.os.Looper.loop(Looper.java:145)
           at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:196)
           at java.lang.Thread.run(Thread.java:818)
09-08 13:25:06.862 31080-3792/com.tutorialproject W/ContextImpl: Failed to ensure directory: /storage/extSdCard/Android/data/com.tutorialproject/cache
09-08 13:25:11.362 31080-31088/com.tutorialproject W/art: Suspending all threads took: 5.930ms

这是一个非常简单的项目,只有几个文本组件,所以我没有做任何请求。所有的网络通信都是由于远程调试。

由于这是一个OutOfMemory问题,我试图将android:largeHeap="true"添加到Manifest.xml,但没有任何变化。该应用程序达到32Mb消耗并死亡。

我修改了应用程序,因此它加载了一个带有5000次图像的组件。禁用调试后,应用程序最多可分配70Mb并且工作正常。我可以在屏幕上滚动,没有任何崩溃。当我启用远程调试时,我会工作一段时间,直到它尝试分配更多内存并再次崩溃。我可以在启用调试的情况下再次启动应用程序,它启动良好,但一段时间后再次崩溃。

恕我直言,React Native远程调试功能在分配新内存方面存在问题(由于某些原因,即使应用程序停止,它也会消耗大量内存)。

答案 1 :(得分:1)

我也有这个问题(这就是我遇到你的帖子的原因)。您是否有机会根据React Native Material Kit Demo建立项目?我有,并且在启动devtools时遇到了完全相同的崩溃问题。

我现在使用react-native init从头开始重建我的项目,问题似乎已经消失。

答案 2 :(得分:1)

看起来像是一个已知问题 https://github.com/facebook/react-native/issues/9665

目前似乎无法找到解决方案:(