转载自:http://faywong.github.io/posts/2015-01-15-03.html

最近发现客户端中android4.3上GS4手机上的WebApp应用特别容易crash。分析了源代码之后发现,在ActivityThread中回收内存时会调用EGLImpl里边去,回收RenderThread,进而调用到计算CPU FPS的逻辑,进而crash:

java.lang.Error: signal 11 (Address not mapped to object) at address 0xbe59dff0 [at libPowerStretch.so:0x2d4c (_ZN11LucidConfig13calcTargetFPSEi+0x1b)]

at system.lib.libPowerStretch_so.0x2d4c(LucidConfig::calcTargetFPS(int):0x1b:0)

at system.lib.libPowerStretch_so.0x2f23(LucidConfig::isLucidActive(bool):0x86:0)

因为在问题出在系统层而android应用回收内存这个message是ActivityManager发出,为正常且必要的行为,无法规避。最终选择如下方式将其绕过:

public class H5WebViewRenderPolicy {

public static boolean shouldDisableHardwareRenderInLayer() {

// case 1: samsung GS4 on android 4.3 is know to cause crashes at libPowerStretch.so:0x2d4c

// use GT-I95xx to match more GS4 series devices though GT-I9500 is the typical device

final boolean isSamsungGs4 = android.os.Build.MODEL != null && android.os.Build.MODEL.contains("GT-I95") && android.os.Build.MANUFACTURER != null && android.os.Build.MANUFACTURER.equals("samsung");

final boolean isJbMr2 = Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR2;

if (isSamsungGs4 && isJbMr2) {

return true;

}

return false;

}

}

以上定义一个渲染策略类(方便以后维护),针对GS4 + android 4.3这种组合在WebView layer层面关闭硬件加速(这样就不会存在RenderThread,自然也就没法触发上文的crash)。

之后在自定义WebView中利用上以上渲染策略类:

final boolean meetApiLevel11 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;

if (H5WebViewRenderPolicy.shouldDisableHardwareRenderInLayer() && meetApiLevel11) {

final View underlyingWebView = webView.getUnderlyingWebView();

if (underlyingWebView != null && webView.getType().equals(WebViewType.SYSTEM_BUILD_IN)) {

try {

underlyingWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

} catch (Exception globalException) {

globalException.printStackTrace();

}

}

}

更新 2015/2/1

该现象表现在多款三星制造的搭载android 4.3系统的手机上,不仅限于GS4

三星android webview,[转]三星GS4(Android 4.3)上webview crash问题相关推荐

  1. 全球 android手机排行 2013,全球Android手机性能排行 三星Note 3夺魁

    尽管跑分测试成绩并不是手机实际性能表现的全部,但至少还是能够在很大程度上体现一款手机硬件配置的水平.而作为知名的跑分软件,安兔日前公布了今年第三季Android手机性能排行榜,则或许能够给我们一些参考 ...

  2. s5原生android 5.0,三星Galaxy S5升级Android 5.0:美味棒棒糖

    快速设置与通知 作为Android 5.0 Lollipop重要的新特性之一,在全新TouchWiz的声音与通知菜单也中也新增了智能通知选项,可对每一个应用的通知状态进行管理,避免敏感信息泄露,而通知 ...

  3. 三星 原生android,原生Android 4.0 三星GALAXY Nexus评测

    前言:北京时间10月19日上午10时,谷歌联合三星在香港举行了一场主题为"Calling all possibilities "的新品发布会,在发布会上正式推出了搭载最新Andro ...

  4. Android备份onedrive,三星Note10正将OneDrive集成到Android相册应用中

    原标题:三星Note10正将OneDrive集成到Android相册应用中 IT之家8月14日消息 除了在Galaxy Note10上预装微软Your Phone应用程序外,三星还宣布三星手机上的相册 ...

  5. 三星android11推送,三星将在2020年1月开始推送Android 10系统:等太久

    11月27日消息,据了解,三星将于2020年一月起,开始对其旗下设备进行推送Android 10系统.爆料显示,预计将有28款设备在适配名单中出现. 谷歌在上个月表示,许多其他制造商已经承诺在2019 ...

  6. galaxy+note8+android+8.0,三星已经开始了S8/S8+以及Note8的Android9.0更新的开发工作!

    上周,三星发布了基于Android 9.0 Pie的One UI.One UI将于明年1月首先推送Galaxy Note9和Galaxy S9的更新,并且随后适配更老的旗舰机型.从三星目前的表现来看, ...

  7. Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒

    在Android手机上,如QQ.微信当有未读消息的时候.我们可以看到在应用的启动图标的右上角会有一个红色圈圈.且圈圈里会动态显示未读消息的数目,如下图显示: 那么该功能是怎么实现的呢? 在万能的互联网 ...

  8. android wear tizen,三星tizen和谷歌android wear对比 android wear和三星tizen哪个好

    三星tizen和谷歌android wear对比: 说实话,要问目前智能手表产品哪个系统最好,其实没有人能给出准确的答案.除去苹果Apple Watch和watchOS之外,还剩下了谷歌的Androi ...

  9. 三星Android Pie软件,三星开始向欧洲Galaxy S9用户推送Android Pie稳定版更新包

    在经过近两个月的测试后,三星终于开始向欧洲市场推送 Galaxy S9 / S9+ 的 Android 9.0 Pie 稳定版更新包.上个月,随着 Android Pie 公众测试的开启,这家韩国科技 ...

最新文章

  1. Scala中的foreach方法和map方法
  2. 数字vlsi芯片设计_【数字逻辑 | 数字逻辑导论】课程导论
  3. 给wxPython事件处理函数传递参数
  4. 放苹果问题 POJ 1664
  5. 从percona server 5.7换到mariadb 10.2
  6. android 自定义相机,Camera,相机遮罩层
  7. redis-3.0.0_rc5的RPM包制定
  8. death coming一直连接服务器,Death Coming总是显示无法连接网络
  9. 使用ELK实时分析SSH暴力破解
  10. Notes for Linux Administration Handbook (1) : Booting and Shutting Down
  11. [转]jQuery的each方法的几种常用的用法
  12. css3中的文字效果
  13. 初探 Yii2 的测试模式 index-test.php
  14. vue中使用阿里图标
  15. python绝对值、加法
  16. POJ - 3376 Finding Palindromes(拓展kmp+trie)
  17. Unhandled exception at 0x0133bc63 ....0xC0000005: Access violation reading location 0x00000004.
  18. 步态情绪识别:STEP学习
  19. MySQL - CALL 语句
  20. python中矩阵的表示方法,稀疏矩阵在Python中的表示方法

热门文章

  1. c语言顺序存储构建一棵二叉树,C语言 数据结构堆排序顺序存储(升序)
  2. java代码审计文件包含_代码审计--一道简单的文件包含题目的多种利用方式
  3. php 同步退出,phpcms phpsso不能同步退出怎么办
  4. Pytorch 基本概念
  5. MFC使用ADO操作数据库
  6. 数组方法 splice()与slice()的区别
  7. Maven自动压缩脚本 和 样式文件配置
  8. Sencha Touch Hello World(转)
  9. 2013年微软编程之美大赛初赛第二题(博客园居然可以插入代码!!)
  10. 网管系统开发经验谈(二)