从 webview 的 Javascript 界面更新 UI 会使应用程序崩溃

2024-02-26

我正在开发混合网络视图/本机应用程序,并且遇到了应用程序崩溃的问题。

以下是简要概述:

  • 应用程序位于单个 FrameLayout 中
  • 顶部有一个 LinearLayout,我在左侧和右侧放置一个按钮,在中间和下面放置我的应用程序徽标,我有我的 WebView
  • 我在用着webview.addJavascriptInterface(myObj, "myJsName")将 JS 接口附加到 Web 视图
  • 在 webView 中,我加载一个简单的 HTML 页面,该页面调用 JS 界面中的公共方法。这些方法只是显示或隐藏人造“标题栏”(LineadLayout)中的各种视图
  • 我的 JS 接口中的方法被调用得很好 - 但如果我尝试更新这些调用中的 UI,应用程序就会崩溃并显示Fatal signal 11 (SIGSEGV)

这是我的活动中的相关代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    webview = (WebView) findViewById(R.id.webview);
    logo = (ImageView) findViewById(R.id.logo);

    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setLightTouchEnabled(true);
    webview.getSettings().setEnableSmoothTransition(true);

    javascriptInterface = new JavascriptInterface() {
        public void showLogo() {
            runOnUiThread(new Runnable() {
                public void run() {
                    MyActivity.this.logo.setVisibility(View.VISIBLE);
                }
            });
        }

        public void hideLogo() {
            MyActivity.this.runOnUiThread( new Runnable() {
                public void run() {
                    MyActivity.this.logo.setVisibility(View.GONE);
                }
            });
        }
    };
    webview.addJavascriptInterface(javascriptInterface, JavascriptInterface.NAME);
    webview.loadUrl("file:///android_asset/test.html");
}
  • 打电话时hideLogo()从我的 JS 代码来看,应用程序崩溃了Fatal signal 11 (SIGSEGV).
  • 如果我删除MyActivity.this.runOnUiThread只是尝试修改 UI 没有任何反应(也没有崩溃)
  • 调试时我保证logo变量不为 null 并且确实代表了正确的 ImageView
  • 另外,在致电hideLogo()徽标确实在应用程序崩溃之前消失

所以,现在我真的很困惑。我尝试过使用Handler and an AsycTask两者都给我带来了相同类型的崩溃。

我对 Android 非常陌生,所以我希望我在这里做了一些愚蠢的事情。感谢任何和所有的帮助!

更新此处的 log cat 的详细输出

10-01 12:29:55.591: INFO/Choreographer(10074): Skipped 74 frames!  The application may be doing too much work on its main thread.
10-01 12:29:55.622: null/libc(10074): Fatal signal 11 (SIGSEGV) at 0x00000008 (code=1), thread 10074 (com.arin.test)
10-01 12:29:55.724: INFO/DEBUG(121): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-01 12:29:55.724: INFO/DEBUG(121): Build fingerprint: 'google/takju/maguro:4.1.1/JRO03C/398337:user/release-keys'
10-01 12:29:55.724: INFO/DEBUG(121): pid: 10074, tid: 10074, name: com.arin.test  >>> com.arin.test <<<
10-01 12:29:55.724: INFO/DEBUG(121): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000008
10-01 12:29:55.849: INFO/DEBUG(121): r0 00000008  r1 5bc3ebc0  r2 00000010  r3 00000004
10-01 12:29:55.849: INFO/DEBUG(121): r4 5a52d008  r5 5a52de38  r6 00000001  r7 00000004
10-01 12:29:55.849: INFO/DEBUG(121): r8 00000008  r9 00000001  sl 00000004  fp 00000001
10-01 12:29:55.849: INFO/DEBUG(121): ip 00000001  sp bedb2310  lr 5bea188c  pc 5beca774  cpsr 80000010
10-01 12:29:55.849: INFO/DEBUG(121): d0  00000000bd0d3d00  d1  3f8469ee00000000
10-01 12:29:55.849: INFO/DEBUG(121): d2  0000000000000080  d3  000000000000003f
10-01 12:29:55.849: INFO/DEBUG(121): d4  0000000000000000  d5  000000003f800000
10-01 12:29:55.849: INFO/DEBUG(121): d6  3f8469eebd0d3dcb  d7  3f8000003f800000
10-01 12:29:55.849: INFO/DEBUG(121): d8  bf800000bf800000  d9  0000000000000000
10-01 12:29:55.849: INFO/DEBUG(121): d10 0000000000000000  d11 0000000000000000
10-01 12:29:55.849: INFO/DEBUG(121): d12 0000000000000000  d13 0000000000000000
10-01 12:29:55.849: INFO/DEBUG(121): d14 0000000000000000  d15 0000000000000000
10-01 12:29:55.849: INFO/DEBUG(121): d16 0000000000000008  d17 000000c1417d8568
10-01 12:29:55.849: INFO/DEBUG(121): d18 000000000358b208  d19 0000000000000000
10-01 12:29:55.849: INFO/DEBUG(121): d20 0000000000000000  d21 0000000000000000
10-01 12:29:55.849: INFO/DEBUG(121): d22 0000000000000000  d23 0000000000000000
10-01 12:29:55.849: INFO/DEBUG(121): d24 3fee45a1e2e00000  d25 4000000006800000
10-01 12:29:55.849: INFO/DEBUG(121): d26 0000000000000000  d27 0000000000000000
10-01 12:29:55.849: INFO/DEBUG(121): d28 408d900000000000  d29 0000000000000000
10-01 12:29:55.849: INFO/DEBUG(121): d30 bffffffff8a00000  d31 0000000000000000
10-01 12:29:55.849: INFO/DEBUG(121): scr 20000010
10-01 12:29:55.849: INFO/DEBUG(121): backtrace:
10-01 12:29:55.849: INFO/DEBUG(121): #00  pc 00034774  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
10-01 12:29:55.849: INFO/DEBUG(121): #01  pc 0000b888  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
10-01 12:29:55.849: INFO/DEBUG(121): stack:
10-01 12:29:55.849: INFO/DEBUG(121): bedb22d0  03d00000
10-01 12:29:55.849: INFO/DEBUG(121): bedb22d4  00000000
10-01 12:29:55.849: INFO/DEBUG(121): bedb22d8  5a4defc8
10-01 12:29:55.849: INFO/DEBUG(121): bedb22dc  5a5316c0
10-01 12:29:55.849: INFO/DEBUG(121): bedb22e0  5a52dee4
10-01 12:29:55.849: INFO/DEBUG(121): bedb22e4  00000008
10-01 12:29:55.849: INFO/DEBUG(121): bedb22e8  00000002
10-01 12:29:55.849: INFO/DEBUG(121): bedb22ec  00000004
10-01 12:29:55.849: INFO/DEBUG(121): bedb22f0  5a52dee4
10-01 12:29:55.849: INFO/DEBUG(121): bedb22f4  5a52d008
10-01 12:29:55.849: INFO/DEBUG(121): bedb22f8  5a52de34
10-01 12:29:55.849: INFO/DEBUG(121): bedb22fc  00000000
10-01 12:29:55.849: INFO/DEBUG(121): bedb2300  00000004
10-01 12:29:55.849: INFO/DEBUG(121): bedb2304  00000023
10-01 12:29:55.849: INFO/DEBUG(121): bedb2308  df0027ad
10-01 12:29:55.849: INFO/DEBUG(121): bedb230c  00000000
10-01 12:29:55.849: INFO/DEBUG(121): #00  bedb2310  5a52d008
10-01 12:29:55.849: INFO/DEBUG(121): ........  ........
10-01 12:29:55.849: INFO/DEBUG(121): #01  bedb2310  5a52d008
10-01 12:29:55.849: INFO/DEBUG(121): bedb2314  5bea188c  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
10-01 12:29:55.849: INFO/DEBUG(121): bedb2318  5a52d008
10-01 12:29:55.849: INFO/DEBUG(121): bedb231c  00000004
10-01 12:29:55.849: INFO/DEBUG(121): bedb2320  00000004
10-01 12:29:55.849: INFO/DEBUG(121): bedb2324  00000000
10-01 12:29:55.849: INFO/DEBUG(121): bedb2328  00000005
10-01 12:29:55.849: INFO/DEBUG(121): bedb232c  5bea398c  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
10-01 12:29:55.849: INFO/DEBUG(121): bedb2330  5a52d008
10-01 12:29:55.849: INFO/DEBUG(121): bedb2334  00000004
10-01 12:29:55.849: INFO/DEBUG(121): bedb2338  00000000
10-01 12:29:55.849: INFO/DEBUG(121): bedb233c  5bef106c  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
10-01 12:29:55.849: INFO/DEBUG(121): bedb2340  00000005
10-01 12:29:55.849: INFO/DEBUG(121): bedb2344  5bea4a70  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so (glDrawArrays+804)
10-01 12:29:55.849: INFO/DEBUG(121): bedb2348  00000004
10-01 12:29:55.849: INFO/DEBUG(121): bedb234c  00000000
10-01 12:29:55.849: INFO/DEBUG(121): memory near r1:
10-01 12:29:55.849: INFO/DEBUG(121): 5bc3eba0 ffffffff ffffffff ffffffff ffffffff  ................
10-01 12:29:55.849: INFO/DEBUG(121): 5bc3ebb0 ffffffff ffffffff ffffffff ffffffff  ................
10-01 12:29:55.849: INFO/DEBUG(121): 5bc3ebc0 ffffffff ffffffff ffffffff ffffffff  ................
10-01 12:29:55.849: INFO/DEBUG(121): 5bc3ebd0 ffffffff ffffffff ffffffff ffffffff  ................
10-01 12:29:55.849: INFO/DEBUG(121): 5bc3ebe0 ffffffff ffffffff ffffffff ffffffff  ................
10-01 12:29:55.849: INFO/DEBUG(121): memory near r4:
10-01 12:29:55.849: INFO/DEBUG(121): 5a52cfe8 5a525fe0 00000001 00000000 00000007  ._RZ............
10-01 12:29:55.849: INFO/DEBUG(121): 5a52cff8 00000007 00000007 00000000 00000f9b  ................
10-01 12:29:55.849: INFO/DEBUG(121): 5a52d008 00000018 0000e7f4 00001c80 00001100  ................
10-01 12:29:55.849: INFO/DEBUG(121): 5a52d018 00001100 0000000a 00000428 00000048  ........(...H...
10-01 12:29:55.849: INFO/DEBUG(121): 5a52d028 0000003c 00000048 0000003c 00000004  <...H...<.......
10-01 12:29:55.849: INFO/DEBUG(121): memory near r5:
10-01 12:29:55.849: INFO/DEBUG(121): 5a52de18 00000000 00000000 00000000 00000000  ................
10-01 12:29:55.849: INFO/DEBUG(121): 5a52de28 00000000 00000000 5a52dc0c 5a52dcb4  ..........RZ..RZ
10-01 12:29:55.849: INFO/DEBUG(121): 5a52de38 5a52dce4 00000000 00000000 00000000  ..RZ............
10-01 12:29:55.849: INFO/DEBUG(121): 5a52de48 00000000 00000000 00000000 00000000  ................
10-01 12:29:55.849: INFO/DEBUG(121): 5a52de58 00000002 00000003 00000003 00000004  ................
10-01 12:29:55.849: INFO/DEBUG(121): memory near sp:
10-01 12:29:55.849: INFO/DEBUG(121): bedb22f0 5a52dee4 5a52d008 5a52de34 00000000  ..RZ..RZ4.RZ....
10-01 12:29:55.849: INFO/DEBUG(121): bedb2300 00000004 00000023 df0027ad 00000000  ....#....'......
10-01 12:29:55.849: INFO/DEBUG(121): bedb2310 5a52d008 5bea188c 5a52d008 00000004  ..RZ...[..RZ....
10-01 12:29:55.849: INFO/DEBUG(121): bedb2320 00000004 00000000 00000005 5bea398c  .............9.[
10-01 12:29:55.849: INFO/DEBUG(121): bedb2330 5a52d008 00000004 00000000 5bef106c  ..RZ........l..[
10-01 12:29:55.849: INFO/DEBUG(121): code around pc:
10-01 12:29:55.849: INFO/DEBUG(121): 5beca754 e781410c e28cc001 e15c0003 3afffffa  .A........\....:
10-01 12:29:55.849: INFO/DEBUG(121): 5beca764 e8bd8010 e92d4010 e3a0c000 ea000004  .....@-.........
10-01 12:29:55.849: INFO/DEBUG(121): 5beca774 e5904000 e5014008 e5904004 e0800002  .@...@...@......
10-01 12:29:55.849: INFO/DEBUG(121): 5beca784 e5014004 e15c0003 e2811008 e28cc001  .@....\.........
10-01 12:29:55.849: INFO/DEBUG(121): 5beca794 3afffff6 e8bd8010 e92d4010 e3a0c000  ...:.....@-.....
10-01 12:29:55.856: INFO/DEBUG(121): code around lr:
10-01 12:29:55.856: INFO/DEBUG(121): 5bea186c e3530000 1a000005 e1a03007 e59c0018  ..S......0......
10-01 12:29:55.856: INFO/DEBUG(121): 5bea187c e59c101c e59c2014 e1a0e00f e59cf024  ..... ......$...
10-01 12:29:55.856: INFO/DEBUG(121): 5bea188c e2866001 e2855004 e5942e50 e3a03001  .`...P..P....0..
10-01 12:29:55.856: INFO/DEBUG(121): 5bea189c e1560002 3affffeb e2840eed e1a01008  ..V....:........
10-01 12:29:55.856: INFO/DEBUG(121): 5bea18ac e280000c e1a02003 e8bd41f0 eaffe178  ..... ...A..x...
10-01 12:29:56.060: INFO/WindowState(321): WIN DEATH: Window{425993f8 com.arin.test/com.arin.test paused=false}
10-01 12:29:56.060: INFO/ActivityManager(321): Process com.arin.test (pid 10074) has died.
10-01 12:29:56.060: WARN/ActivityManager(321): Force removing ActivityRecord{4226e5d0 com.arin.test/com.arin.test}: app died, no saved state
10-01 12:29:56.099: DEBUG/Zygote(124): Process 10074 terminated by signal (11)
10-01 12:29:56.161: WARN/InputMethodManagerService(321): Got RemoteException sending setActive(false) notification to pid 10074 uid 10008

我也有同样的问题。使用处理程序修复了它:

class MyJavaScriptInterface   
    {  
        // gets called from JavasScript
        @SuppressWarnings("unused")  
        public void notifyStarted()  
        {  
            _handler.post(_onNavigationStarted);
        }  
    } 

    final Handler _handler = new Handler();

    final Runnable _onNavigationStarted = new Runnable() {
        public void run() {
            _me.navigationStarted();
        }
    };

    protected void navigationStarted() {
        _btnNavigate.setEnabled(true);
        _btnNavigate.setText(_me.getResources().getString(R.string.Navigate));
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 webview 的 Javascript 界面更新 UI 会使应用程序崩溃 的相关文章

随机推荐

  • XSLT 有数组的概念吗?

    我以前从未真正使用过 XSLT 正在寻求一些建议 我从 GSA 箱中以 XML 形式返回了以下项目
  • SQL 搜索和替换

    不可否认 对于 SQL 命令我是个菜鸟 一名黑客在我的 WordPress 网站上的每个帖子和页面的末尾插入了一个脚本标签 我试图在 wp posts 表中进行查找和替换 但当我运行模拟查询 这是我所拥有的 UPDATE wp posts
  • HTTP 动词 - 何时使用 GET/POST/PUT/Delete

    当您从事 RESTFUL 服务时 您经常会听到这些术语GET POST PUT DELETE 我的问题是这么多动词背后的想法是什么 我可以在以下人的帮助下实现一切GET动词或者如果我想在消息正文中发布一些大数据 我可以使用POST动词 我认
  • 从 Rails 生成 PDF

    The Ruby On Rails Wiki 列出了几个库 http wiki rubyonrails org rails pages HowtoGeneratePDFss 促进PDF一代在Rails 我需要打印地址标签 以字母格式 因此每
  • 如何为 VisualVM“<未知应用程序>”命名?

    JDK 1 6 捆绑了一个名为 VisualVM 的便捷工具 可让您检查正在运行的 Java 进程并与之交互 其中一项功能是它会自动检测本地计算机上正在运行的 JVM 大多数被列为 pid xxxx 但有些有名称和图标 例如 VisualV
  • REGEXP_EXTRACT(word,r'(\w\w\'\w\w)') 中 r 的含义是什么

    我在 BigQuery 中都找不到答案参考 https cloud google com bigquery query reference regularexpressionfunctions or re2 wiki https code
  • 如何获取 PyObject 的引用计数?

    如何获取a的引用计数PyObject来自 C 有功能Py INCREF and Py DECREF增加 减少它 但我还没有找到任何返回对象引用计数的函数 我需要它用于调试目的 每个对象的引用计数都存储在PyObject本身 在一个名为的变量
  • 同时创建新文件[重复]

    这个问题在这里已经有答案了 为了创建一个新的 唯一的文件名 我使用以下代码 File file new File name synchronized sync int cnt 0 while file exists file new Fil
  • 对于动态元素,scroll() 在 jQuery 中不起作用

    我正在使用以下内容 这不适用于动态创建的元素 我正在使用 jQuery 1 4 2 wrapper1 live scroll function alert 123 wrapper2 scrollLeft wrapper1 scrollLef
  • 净::ERR_INCOMPLETE_CHUNKED_ENCODING

    我使用 htaccess 将 URL 从 someurl com 重写为 someurl com public www 根目录中的第一个 htaccess 包含以下内容 DirectoryIndex public RewriteEngine
  • 交替组合两个等长向量[重复]

    这个问题在这里已经有答案了 我在挣扎 我觉得必须有一种很好的矢量化方法来做到这一点 但我只是没有找到它 我目前有两个等长的向量 我想将它们组合起来 但我想要向量 1 中的第一个元素 然后是向量 2 中的第一个元素 然后是向量 1 中的第二个
  • Django:模型上次修改日期和修改数量

    我有一个名为的 django 模型Blog 我想在当前模型中添加一个用于 last modified date 的字段 我知道如何设置默认值 但我希望它能够在我通过管理界面修改博客条目时自动更新 有没有某种方法可以强制将此值设置为每个管理站
  • 选择单列中的多行,以换行符分隔

    我有一个表 其值如下所示 Id Name Fruit 1 Jon Apple 2 Jon Orange 3 Jon Grape 4 Mike Apple 5 Mike Orange mysql中如何将列区分为类似这样的内容 Name Fru
  • JSX:内联条件属性 [href]

    我正在 jsx 中寻找 Href 属性的内联条件解决方案 如果我提供网址 我想输出 a href example url Logo a 如果不 a Logo a 最简单的解决方案 React 删除值为以下的属性undefined or nu
  • 范围输入跑步者进度填充颜色

    I m working with the range input here I m trying to add color to the slider thumb before I had tried using background gr
  • PartialView 作为字符串 + JsonResult

    我只是在寻找一种好方法 如何从服务器返回 JSON 对象 其中包含部分视图的 html 和一些附加数据 如果需要 我在用着蒂姆 斯科特的方法 https stackoverflow com questions 483091 render a
  • Node.js for循环中的mysql查询

    我有两个疑问 首先 SELECT auctions name wowitemdata itemName auctions itemId auctions buyout auctions quantity FROM auctions INNE
  • 如何在 Vim 中替换一个文件夹中的所有文件?

    我知道通过输入以下内容 s iwanthis replacedbythis g 将更改文件的所有匹配单词 如何对文件夹中的所有文件执行相同的操作 实际上替换了很多这样的单词 padding bottom 5px 打开 Vim 将所有文件加载
  • 无状态协议是否比有状态协议更适合使用?

    我可以看到 有状态的协议可以减少像 cookie 这样的 模拟状态 但是测试变得更加困难 以确保您的实现正确并重新连接 并且会话继续可能很难处理 始终使用无状态协议是否被认为是更好的做法 或者它确实是特定于领域的 我认为在处理有状态协议时身
  • 从 webview 的 Javascript 界面更新 UI 会使应用程序崩溃

    我正在开发混合网络视图 本机应用程序 并且遇到了应用程序崩溃的问题 以下是简要概述 应用程序位于单个 FrameLayout 中 顶部有一个 LinearLayout 我在左侧和右侧放置一个按钮 在中间和下面放置我的应用程序徽标 我有我的