Error: WebView.destroy() called while still attached 的解决办法

本文详细介绍了在Android应用中遇到的WebView闪退错误(Error:WebView.destroy()calledwhilestillattached)及其解决方案。通过确保在调用WebView.destroy()之前解除WebView与其父布局的关系,可以有效避免此错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Error: WebView.destroy() called while still attached 的解决办法  

2013-12-03 16:11:30|  分类: android之错误 |  标签: |字号 订阅

今天在改Webview页面的时候出现了闪退。看Log发现是这个问题Error: WebView.destroy() called while still attached。


谷歌了一下。发现只有stackoverflow解释这个问题比较清楚,另外鄙视下百度,啥都搜不到。不过一些问题能用中文描述的,还是百度相关内容比较多。


现在总结下这个问题的解决办法。先大概解释下这个错误,这个错误从字面意思来说是当你结束webview的时候,Webview还依附在父控件下,使用解决这个问题

就是在WebView.destroy()前要解除他们之间的依附关系。一般会碰上这个问题应该是这样对webview进行了操作:

protected void onDestroy()
{
    if (adView != null)
    {
        adView.destroy();
    }
}


附上一段详细的正确代码:

[java]  view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.         android:id="@+id/webviewRelativeLayout"  
  3.         android:layout_width="fill_parent"  
  4.         android:layout_height="fill_parent">  
  5.   
  6. <WebView  
  7.     android:id="@+id/webView1"  
  8.     android:layout_width="match_parent"  
  9.     android:layout_height="match_parent"  
  10.     android:layout_below="@+id/headerAlarmsWebViewTxt"  
  11.     android:layout_marginBottom="0dip"  
  12.     android:hapticFeedbackEnabled="true"  
  13.     android:overScrollMode="never"  
  14.     android:scrollbarAlwaysDrawVerticalTrack="false"  
  15.     android:scrollbars="none" />  
  16.   
  17.  </RelativeLayout>  
  18. Then you assign it to an instance variable e.g. :  
  19.   
  20. _layout = (RelativeLayout) findViewById(R.id.webviewRelativeLayout);  
  21. webView = (WebView) findViewById(R.id.webView1);  
  22. and on Destroy do something like this:  
  23.   
  24. @Override  
  25. protected void onDestroy() {  
  26.     super.onDestroy();  
  27.     _layout.removeView(webView);  
  28.     webView.removeAllViews();  
  29.     webView.destroy();  
  30. }  
### 微信小程序 `common` 目录下 `webview.js`、`webview.json` 和 `webview.wxml` 文件的作用 #### 1. `webview.wxml` `webview.wxml` 是微信小程序中用于定义页面结构的文件。在这个文件中,主要负责展示 WebView 组件的内容。根据已知的信息,`webview.wxml` 的核心作用是嵌入 `<web-view>` 组件,并通过绑定动态 URL 来加载外部网页内容[^2]。 以下是典型的 `webview.wxml` 结构示例: ```xml <view class="container"> <web-view src="{{sitURL}}"></web-view> </view> ``` 在此代码片段中,`{{sitURL}}` 表示从 `webview.js` 或其他上下文中传递过来的动态 URL 值,这使得开发者能够灵活地控制加载的具体网页地址。 --- #### 2. `webview.js` `webview.js` 是逻辑层脚本文件,主要用于处理与业务逻辑相关的交互行为。它的职责包括但不限于以下几个方面: - **初始化数据**:为 `webview.wxml` 提供初始数据,例如设置 `sitURL` 属性的值。 - **事件监听**:捕获来自 Web 页面或小程序内部触发的事件,从而实现双向通信功能[^1]。 - **生命周期管理**:在页面的不同阶段执行相应的操作,如加载完成后的回调函数。 下面是一个简单的 `webview.js` 实现例子: ```javascript Page({ data: { sitURL: '' // 初始化为空字符串 }, onLoad(options) { const url = options.url || ''; // 获取传入的 URL 参数 this.setData({ sitURL: decodeURIComponent(url) }); // 设置到视图层 } }); ``` 这里展示了如何接收从前端页面传递来的查询参数(即 `options.url`),并通过调用 `this.setData()` 方法更新视图上的 `sitURL` 字段。 --- #### 3. `webview.json` `webview.json` 配置文件用来指定当前页面的一些全局属性和权限设定。虽然它不像 `.js` 和 `.wxml` 那样直接参与运行时的行为表现,但它仍然扮演着非常重要的角色。常见的配置项有以下几种: - **窗口样式**:决定导航条文字颜色 (`navigationBarTextStyle`)、背景色 (`navigationBarBackgroundColor`) 等外观细节[^3]。 - **性能优化开关**:启用/禁用某些特定功能以提升用户体验效果。 - **第三方插件声明**:当项目依赖于额外的服务提供商时需在这里注册相关信息。 一个基础版本的 `webview.json` 可能如下所示: ```json { "usingComponents": {}, "window": { "backgroundColor": "#ffffff", "navigationBarTitleText": "Web View Page" } } ``` 这段 JSON 数据明确了新打开的 WebView 页面应该具备什么样的顶部栏显示风格——白色底板搭配黑色字体标题“Web View Page”。 --- ### 总结 综上所述,在微信小程序开发过程中,“common”目录下的这三个文件各自承担不同的使命却紧密协作共同构建起完整的 H5 浏览器容器解决方案。其中 `webview.wxml` 主要关注 UI 渲染层面的工作;而 `webview.js` 则侧重于算法计算以及状态维护等方面的任务分配;至于最后提到的那个小小的 `webview.json` 文档呢,则是从宏观角度出发给予整个模块必要的指导方针以便更好地融入整体框架体系之中[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值