React Native - 导航 to/from 一个页面后取消引用空指针,该页面包含嵌入在其自己的 WebView 中的多个推文
React Native - Null pointer dereference after navigating to/from a page containing multiple tweets embedded inside their own WebViews
我目前正在为工作构建的应用主要侧重于显示文章。其中一些包含 Twitter 嵌入(在网络版本上)并且由于 API 由我们的两个应用程序共享,我也收到嵌入为 HTML。每当我尝试在 WebView 中显示推文并将源设置为 HTML 和用于样式的 Twitter JS 脚本时,页面要么正确加载但在我按回(使用 react-navigation)时崩溃,要么它只是崩溃加载但仅在 ANDROID.
我试过以下方法:
在那边也使用社区支持的 WebView package instead of the built-in one. I have opened an issue。
从 WebView 中删除 JS 脚本。
改用 injectedJavaScript
道具。
安装 TwitterKit 以使用本机嵌入,不幸的是,Twitter 不再支持它了:(
这是我呈现 WebView 的方式:
const JS = '<script type="text/javascript" src="https://platform.twitter.com/widgets.js"></script>';
return (
<View
key={content.embed._id}
style={[{ overflow : "hidden", marginTop : 15, marginStart : 15 }]}>
<WebView
scrollEnabled={false}
style={{ height : 150, width : Dimensions.get('window').width - 30 }}
source={{ html : content.embed.html + JS }} />
</View>
);
这是来自 Android Studio 的堆栈跟踪(我什至没有 RedBox,只是一个普通的旧硬崩溃)。
Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1c in tid 13662 (RenderThread), pid 13634 (com.example)
Build fingerprint: 'google/sdk_gphone_x86/generic_x86:9/PSR1.180720.093/5456446:userdebug/dev-keys'
Revision: '0'
ABI: 'x86'
pid: 13634, tid: 13662, name: RenderThread >>> com.example <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1c
Cause: null pointer dereference
eax e7a959c0 ebx f0a794a0 ecx f0a6994c edx 00000002
edi efcbbd9c esi 00000000
ebp d314a7e8 esp d314a7d0 eip f07edeea
backtrace:
#00 pc 0060ceea /system/lib/libhwui.so (SkSurface::getCanvas()+26)
#01 pc 0009b53d /system/lib/libhwui.so (android::uirenderer::skiapipeline::GLFunctorDrawable::onDraw(SkCanvas*)+3357)
#02 pc 005200f7 /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+279)
#03 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#04 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#05 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#06 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#07 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#08 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#09 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#10 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#11 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#12 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#13 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#14 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#15 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#16 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#17 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#18 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#19 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#20 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#21 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#22 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#23 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#24 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#25 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#26 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#27 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#28 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#29 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#30 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#31 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#32 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#33 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#34 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#35 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#36 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#37 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#38 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#39 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#40 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#41 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#42 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#43 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#44 pc 000a655e /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaPipeline::renderLayersImpl(android::uirenderer::LayerUpdateQueue const&, bool, bool)+862)
#45 pc 00546e44 /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaPipeline::renderFrame(android::uirenderer::LayerUpdateQueue const&, SkRect const&, std::__1::vector<android::sp<android::uirenderer::RenderNode>, std::__1::allocator<android::sp<android::uirenderer::RenderNode>>> const&, bool, bool, android::uirenderer::Rect const&, sk_sp<SkSurface>)+84)
#46 pc 00545e39 /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaOpenGLPipeline::draw(android::uirenderer::renderthread::Frame const&, SkRect const&, SkRect const&, android::uirenderer::FrameBuilder::LightGeometry const&, android::uirenderer::LayerUpdateQueue*, android::uirenderer::Rect const&, bool, bool, android::uirenderer::BakedOpRenderer::LightInfo const&, std::__1::vector<android::sp<android::uirenderer::RenderNode>, std::__1::allocator<android::sp<android::uirenderer::RenderNode>>
#47 pc 000b2e76 /system/lib/libhwui.so (android::uirenderer::renderthread::CanvasContext::draw()+262)
#48 pc 0054bd02 /system/lib/libhwui.so (_ZNSt3__110__function6__funcIZN7android10uirenderer12renderthread13DrawFrameTask11postAndWaitEvE3$_0NS_9allocatorIS6_EEFvvEEclEv$c303f2d2360db58ed70a2d0ac7ed911b+898)
#49 pc 004fd4c2 /system/lib/libhwui.so (android::uirenderer::WorkQueue::process()+242)
#50 pc 000c454a /system/lib/libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop()+314)
#51 pc 0000e616 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+326)
#52 pc 0000df76 /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+246)
#53 pc 0008f065 /system/lib/libc.so (__pthread_start(void*)+53)
所以我在社区支持的 WebView github 页面上做了更多的挖掘,结果发现 androidHardwareAccelerationDisabled
是 boolean
。我尝试将其设置为 true
,它似乎解决了问题!
<Webview
androidHardwareAccelerationDisabled
...
/>
我加了
android:hardwareAccelerated="false"
在 android 清单文件中,它解决了问题。
我目前正在为工作构建的应用主要侧重于显示文章。其中一些包含 Twitter 嵌入(在网络版本上)并且由于 API 由我们的两个应用程序共享,我也收到嵌入为 HTML。每当我尝试在 WebView 中显示推文并将源设置为 HTML 和用于样式的 Twitter JS 脚本时,页面要么正确加载但在我按回(使用 react-navigation)时崩溃,要么它只是崩溃加载但仅在 ANDROID.
我试过以下方法:
在那边也使用社区支持的 WebView package instead of the built-in one. I have opened an issue。
从 WebView 中删除 JS 脚本。
改用
injectedJavaScript
道具。安装 TwitterKit 以使用本机嵌入,不幸的是,Twitter 不再支持它了:(
这是我呈现 WebView 的方式:
const JS = '<script type="text/javascript" src="https://platform.twitter.com/widgets.js"></script>';
return (
<View
key={content.embed._id}
style={[{ overflow : "hidden", marginTop : 15, marginStart : 15 }]}>
<WebView
scrollEnabled={false}
style={{ height : 150, width : Dimensions.get('window').width - 30 }}
source={{ html : content.embed.html + JS }} />
</View>
);
这是来自 Android Studio 的堆栈跟踪(我什至没有 RedBox,只是一个普通的旧硬崩溃)。
Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1c in tid 13662 (RenderThread), pid 13634 (com.example)
Build fingerprint: 'google/sdk_gphone_x86/generic_x86:9/PSR1.180720.093/5456446:userdebug/dev-keys'
Revision: '0'
ABI: 'x86'
pid: 13634, tid: 13662, name: RenderThread >>> com.example <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1c
Cause: null pointer dereference
eax e7a959c0 ebx f0a794a0 ecx f0a6994c edx 00000002
edi efcbbd9c esi 00000000
ebp d314a7e8 esp d314a7d0 eip f07edeea
backtrace:
#00 pc 0060ceea /system/lib/libhwui.so (SkSurface::getCanvas()+26)
#01 pc 0009b53d /system/lib/libhwui.so (android::uirenderer::skiapipeline::GLFunctorDrawable::onDraw(SkCanvas*)+3357)
#02 pc 005200f7 /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+279)
#03 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#04 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#05 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#06 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#07 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#08 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#09 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#10 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#11 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#12 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#13 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#14 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#15 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#16 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#17 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#18 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#19 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#20 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#21 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#22 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#23 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#24 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#25 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#26 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#27 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#28 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#29 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#30 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#31 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#32 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#33 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#34 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#35 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#36 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#37 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#38 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#39 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#40 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#41 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#42 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#43 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#44 pc 000a655e /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaPipeline::renderLayersImpl(android::uirenderer::LayerUpdateQueue const&, bool, bool)+862)
#45 pc 00546e44 /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaPipeline::renderFrame(android::uirenderer::LayerUpdateQueue const&, SkRect const&, std::__1::vector<android::sp<android::uirenderer::RenderNode>, std::__1::allocator<android::sp<android::uirenderer::RenderNode>>> const&, bool, bool, android::uirenderer::Rect const&, sk_sp<SkSurface>)+84)
#46 pc 00545e39 /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaOpenGLPipeline::draw(android::uirenderer::renderthread::Frame const&, SkRect const&, SkRect const&, android::uirenderer::FrameBuilder::LightGeometry const&, android::uirenderer::LayerUpdateQueue*, android::uirenderer::Rect const&, bool, bool, android::uirenderer::BakedOpRenderer::LightInfo const&, std::__1::vector<android::sp<android::uirenderer::RenderNode>, std::__1::allocator<android::sp<android::uirenderer::RenderNode>>
#47 pc 000b2e76 /system/lib/libhwui.so (android::uirenderer::renderthread::CanvasContext::draw()+262)
#48 pc 0054bd02 /system/lib/libhwui.so (_ZNSt3__110__function6__funcIZN7android10uirenderer12renderthread13DrawFrameTask11postAndWaitEvE3$_0NS_9allocatorIS6_EEFvvEEclEv$c303f2d2360db58ed70a2d0ac7ed911b+898)
#49 pc 004fd4c2 /system/lib/libhwui.so (android::uirenderer::WorkQueue::process()+242)
#50 pc 000c454a /system/lib/libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop()+314)
#51 pc 0000e616 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+326)
#52 pc 0000df76 /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+246)
#53 pc 0008f065 /system/lib/libc.so (__pthread_start(void*)+53)
所以我在社区支持的 WebView github 页面上做了更多的挖掘,结果发现 androidHardwareAccelerationDisabled
是 boolean
。我尝试将其设置为 true
,它似乎解决了问题!
<Webview
androidHardwareAccelerationDisabled
...
/>
我加了
android:hardwareAccelerated="false"
在 android 清单文件中,它解决了问题。