代码之家  ›  专栏  ›  技术社区  ›  emeraldsanto

React Native-在导航到包含嵌入在自己的web视图中的多条tweet的页面后取消对空指针的引用

  •  0
  • emeraldsanto  · 技术社区  · 5 年前

    我目前为工作而开发的应用程序主要集中在显示文章上。其中一些包含Twitter嵌入(在web版本上),由于API由我们的两个应用程序共享,因此我也将嵌入作为HTML接收。每当我试图在WebView中显示tweets,并将源代码设置为HTML和Twitter JS脚本以进行样式设置时,页面要么正确加载,但在我按back(使用react导航)时崩溃,要么只是加载时崩溃,但仅在ANDROID上崩溃。

    我试过以下方法:

    • package 而不是内置的。我开了一个 issue

    • 从WebView中删除JS脚本。

    • injectedJavaScript 代替道具。

    这就是我呈现网络视图的方式:

    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的堆栈跟踪(我甚至没有红盒,只是一个普通的旧硬崩溃)。

    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)
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Yuri Za Yanick Bélanger    4 年前

    所以我在社区支持的WebView github页面上做了更多的研究,结果发现 androidHardwareAccelerationDisabled 这是一个 boolean . 我试着把它设置成 true 它似乎已经解决了这个问题!

    <Webview
        androidHardwareAccelerationDisabled={true}
        ... />