三星android webview,[转]三星GS4(Android 4.3)上webview crash问题
转载自: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问题相关推荐
- 全球 android手机排行 2013,全球Android手机性能排行 三星Note 3夺魁
尽管跑分测试成绩并不是手机实际性能表现的全部,但至少还是能够在很大程度上体现一款手机硬件配置的水平.而作为知名的跑分软件,安兔日前公布了今年第三季Android手机性能排行榜,则或许能够给我们一些参考 ...
- s5原生android 5.0,三星Galaxy S5升级Android 5.0:美味棒棒糖
快速设置与通知 作为Android 5.0 Lollipop重要的新特性之一,在全新TouchWiz的声音与通知菜单也中也新增了智能通知选项,可对每一个应用的通知状态进行管理,避免敏感信息泄露,而通知 ...
- 三星 原生android,原生Android 4.0 三星GALAXY Nexus评测
前言:北京时间10月19日上午10时,谷歌联合三星在香港举行了一场主题为"Calling all possibilities "的新品发布会,在发布会上正式推出了搭载最新Andro ...
- Android备份onedrive,三星Note10正将OneDrive集成到Android相册应用中
原标题:三星Note10正将OneDrive集成到Android相册应用中 IT之家8月14日消息 除了在Galaxy Note10上预装微软Your Phone应用程序外,三星还宣布三星手机上的相册 ...
- 三星android11推送,三星将在2020年1月开始推送Android 10系统:等太久
11月27日消息,据了解,三星将于2020年一月起,开始对其旗下设备进行推送Android 10系统.爆料显示,预计将有28款设备在适配名单中出现. 谷歌在上个月表示,许多其他制造商已经承诺在2019 ...
- galaxy+note8+android+8.0,三星已经开始了S8/S8+以及Note8的Android9.0更新的开发工作!
上周,三星发布了基于Android 9.0 Pie的One UI.One UI将于明年1月首先推送Galaxy Note9和Galaxy S9的更新,并且随后适配更老的旗舰机型.从三星目前的表现来看, ...
- Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒
在Android手机上,如QQ.微信当有未读消息的时候.我们可以看到在应用的启动图标的右上角会有一个红色圈圈.且圈圈里会动态显示未读消息的数目,如下图显示: 那么该功能是怎么实现的呢? 在万能的互联网 ...
- android wear tizen,三星tizen和谷歌android wear对比 android wear和三星tizen哪个好
三星tizen和谷歌android wear对比: 说实话,要问目前智能手表产品哪个系统最好,其实没有人能给出准确的答案.除去苹果Apple Watch和watchOS之外,还剩下了谷歌的Androi ...
- 三星Android Pie软件,三星开始向欧洲Galaxy S9用户推送Android Pie稳定版更新包
在经过近两个月的测试后,三星终于开始向欧洲市场推送 Galaxy S9 / S9+ 的 Android 9.0 Pie 稳定版更新包.上个月,随着 Android Pie 公众测试的开启,这家韩国科技 ...
最新文章
- Scala中的foreach方法和map方法
- 数字vlsi芯片设计_【数字逻辑 | 数字逻辑导论】课程导论
- 给wxPython事件处理函数传递参数
- 放苹果问题 POJ 1664
- 从percona server 5.7换到mariadb 10.2
- android 自定义相机,Camera,相机遮罩层
- redis-3.0.0_rc5的RPM包制定
- death coming一直连接服务器,Death Coming总是显示无法连接网络
- 使用ELK实时分析SSH暴力破解
- Notes for Linux Administration Handbook (1) : Booting and Shutting Down
- [转]jQuery的each方法的几种常用的用法
- css3中的文字效果
- 初探 Yii2 的测试模式 index-test.php
- vue中使用阿里图标
- python绝对值、加法
- POJ - 3376 Finding Palindromes(拓展kmp+trie)
- Unhandled exception at 0x0133bc63 ....0xC0000005: Access violation reading location 0x00000004.
- 步态情绪识别:STEP学习
- MySQL - CALL 语句
- python中矩阵的表示方法,稀疏矩阵在Python中的表示方法