龙将2官网三国3.3版本魅族5为什么不可以更新

Android 5.1 WebView内存泄漏分析
在 Android 5.1 系统上,在项目中遇到一个WebView引起的问题,每打开一个带webview的界面,退出后,这个activity都不会被释放,activity的实例会被持有,由于我们项目中经常会用到浏览web页面的地方,可能引起内存积压,导致内存溢出的现象,所以这个问题还是比较严重的。
使用Android Studio的内存monitor,得到了以下的内存分析,我打开了三个BookDetailActivity界面(都有webview),检查结果显示有3个activity泄漏,如下图所示:
这个问题还是比较严重的,那么进一步看详细的信息,找出到底是哪里引起的内存泄漏,详情的reference tree如下图所示:
从上图中可以看出,在第1层中的 TBReaderApplication 中的 mComponentCallbacks 成员变量,它是一个array list,它里面会持有住activity,引导关系是 mComponentCallbacks-&AwContents-&BaseWebView-&BookDetailActivity, 代码在 Application 类里面,代码如下所示:
public void registerComponentCallbacks(ComponentCallbacks callback) {
synchronized (mComponentCallbacks) {
mComponentCallbacks.add(callback);
public void unregisterComponentCallbacks(ComponentCallbacks callback) {
synchronized (mComponentCallbacks) {
mComponentCallbacks.remove(callback);
上面两个方法,会在 Context 基类中被调用,代码如下:
* Add a new {@link ComponentCallbacks} to the base application of the
* Context, which will be called at the same times as the ComponentCallbacks
* methods of activities and other components are called. Note that you
* &em&must&/em& be sure to use {@link #unregisterComponentCallbacks} when
* appro this will not be removed for you.
* @param callback The interface to call. This can be either a
* {@link ComponentCallbacks} or {@link ComponentCallbacks2} interface.
public void registerComponentCallbacks(ComponentCallbacks callback) {
getApplicationContext().registerComponentCallbacks(callback);
* Remove a {@link ComponentCallbacks} object that was previously registered
* with {@link #registerComponentCallbacks(ComponentCallbacks)}.
public void unregisterComponentCallbacks(ComponentCallbacks callback) {
getApplicationContext().unregisterComponentCallbacks(callback);
从第二张图我们已经知道,是webview引起的内存泄漏,而且能看到是在 org.chromium.android_webview.AwContents 类中,难道是这个类注册了component callbacks,但是未反注册?一般按系统设计,都会反注册的,最有可能的原因就是某些情况下导致不能正常反注册,不多说,read the fucking source。基于这个思路,我把chromium的源码下载下来,代码在这里 chromium_org(/platform/external/chromium_org/?spm=.blogcontEPtE)
然后找到 org.chromium.android_webview.AwContents 类,看看这两个方法 onAttachedToWindow 和 onDetachedFromWindow:
public void onAttachedToWindow() {
if (isDestroyed())
if (mIsAttachedToWindow) {
Log.w(TAG, "onAttachedToWindow called when already attached. Ignoring");
mIsAttachedToWindow =
mContentViewCore.onAttachedToWindow();
nativeOnAttachedToWindow(mNativeAwContents, mContainerView.getWidth(),
mContainerView.getHeight());
updateHardwareAcceleratedFeaturesToggle();
if (mComponentCallbacks != null)
mComponentCallbacks = new AwComponentCallbacks();
mContext.registerComponentCallbacks(mComponentCallbacks);
public void onDetachedFromWindow() {
if (isDestroyed())
if (!mIsAttachedToWindow) {
Log.w(TAG, "onDetachedFromWindow called when already detached. Ignoring");
mIsAttachedToWindow =
hideAutofillPopup();
nativeOnDetachedFromWindow(mNativeAwContents);
mContentViewCore.onDetachedFromWindow();
updateHardwareAcceleratedFeaturesToggle();
if (mComponentCallbacks != null) {
mContext.unregisterComponentCallbacks(mComponentCallbacks);
mComponentCallbacks =
mScrollAccessibilityHelper.removePostedCallbacks();
系统会在attach处detach进行注册和反注册component callback,注意到 onDetachedFromWindow() 方法的第一行,if (isDestroyed()), 如果 isDestroyed() 返回 true 的话,那么后续的逻辑就不能正常走到,所以就不会执行unregister的操作,通过看代码,可以得到,调用主动调用 destroy()方法,会导致 isDestroyed() 返回 true。
* Destroys this object and deletes its native counterpart.
public void destroy() {
if (isDestroyed())
// If we are attached, we have to call native detach to clean up
// hardware resources.
if (mIsAttachedToWindow) {
nativeOnDetachedFromWindow(mNativeAwContents);
mIsDestroyed =
new Handler().post(new Runnable() {
public void run() {
destroyNatives();
一般情况下,我们的activity退出的时候,都会主动调用 WebView.destroy() 方法,经过分析,destroy()的执行时间在onDetachedFromWindow之前,所以就会导致不能正常进行unregister()。
找到了原因后,解决方案也比较简单,核心思路就是让onDetachedFromWindow先走,那么在主动调用之前destroy(),把webview从它的parent上面移除掉。
ViewParent parent = mWebView.getParent();
if (parent != null) {
((ViewGroup) parent).removeView(mWebView);
mWebView.destroy();
完整的代码如下:
public void destroy() {
if (mWebView != null) {
// 如果先调用destroy()方法,则会命中if (isDestroyed())这一行代码,需要先onDetachedFromWindow(),再
// destory()
ViewParent parent = mWebView.getParent();
if (parent != null) {
((ViewGroup) parent).removeView(mWebView);
mWebView.stopLoading();
// 退出时调用此方法,移除绑定的服务,否则某些特定系统会报错
mWebView.getSettings().setJavaEnabled(false);
mWebView.clearHistory();
mWebView.clearView();
mWebView.removeAllViews();
mWebView.destroy();
} catch (Throwable ex) {
Android 5.1之前的代码
对比了5.1之前的代码,它是不会存在这样的问题的,以下是kitkat的代码,它少了一行 if (isDestroyed()),有点不明白,为什么google在高版本把这一行代码加上。
* @see android.view.View#onDetachedFromWindow()
public void onDetachedFromWindow() {
mIsAttachedToWindow =
hideAutofillPopup();
if (mNativeAwContents != 0) {
nativeOnDetachedFromWindow(mNativeAwContents);
mContentViewCore.onDetachedFromWindow();
if (mComponentCallbacks != null) {
mContainerView.getContext().unregisterComponentCallbacks(mComponentCallbacks);
mComponentCallbacks =
if (mPendingDetachCleanupReferences != null) {
for (int i = 0; i & mPendingDetachCleanupReferences.size(); ++i) {
mPendingDetachCleanupReferences.get(i).cleanupNow();
mPendingDetachCleanupReferences =
在开发过程中,还发现一个支付宝SDK的内存问题,也是因为这个原因,具体的类是 com.alipay.sdk.app.H5PayActivity,我们没办法,也想了一个不是办法的办法,在每个activity destroy时,去主动把 H5PayActivity 中的webview从它的parent中移除,但这个问题限制太多,不是特别好,但的确也能解决问题,方案如下:
* 解决支付宝的 com.alipay.sdk.app.H5PayActivity 类引起的内存泄漏。
* 说明:&br&
* 这个方法是通过监听H5PayActivity生命周期,获得实例后,通过反射将webview拿出来,从
* 它的parent中移除。如果后续支付宝SDK官方修复了该问题,则我们不需要再做什么了,不管怎么
* 说,这个方案都是非常恶心的解决方案,非常不推荐。同时,如果更新了支付宝SDK后,那么内部被混淆
* 的字段名可能更改,所以该方案也无效了。
* @param activity
public static void resolveMemoryLeak(Activity activity) {
if (activity == null) {
String className = activity.getClass().getCanonicalName();
if (TextUtils.equals(className, "com.alipay.sdk.app.H5PayActivity")) {
Object object = Reflect.on(activity).get("a");
if (DEBUG) {
LogUtils.e(TAG, "AlipayMemoryLeak.resolveMemoryLeak activity = " + className
+ ", field = " + object);
if (object instanceof WebView) {
WebView webView = (WebView)
ViewParent parent = webView.getParent();
if (parent instanceof ViewGroup) {
((ViewGroup) parent).removeView(webView);
以上是对发现的WebView内存泄漏的一个简单分析,权且记录一下。
参考文章: 零号路杂货铺 - Android 5.1 Webview 内存泄漏新场景 , 我也是在这个基础之上进行一些学习,感谢。
后Hadoop时代,大数据平台架构
过去数年,大数据开源生态圈完成了从无到有的转变,时下更是各种技术框架林立——从收集到处理,一直到数据可视化和储存。在这个Hadoop已经不是唯一的时代,企业又该如何选择开源大数据技术去架构自己的平台,Kyligence创始人兼CEO韩卿 & 阿里云技术专家曹龙将和你一起探讨。
开始时间: 20:00:00
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点评论 | (热门点评)
搜索速度挺快,搜索内容也有了很大的改进,总体比原来好多了!!现在设为默认搜索了
广州韩医生祛痘
请问。百度出的这个平台不怕人家同行相互恶意诽谤吗?故意评论 恶意搞对方的评论嘛!
一直用百度搜索,但是最近感觉广告有点多,搜索信息也杂,可以向360搜索学习
百度很好用,尤其是百度搜索,用了好几年了。不足之处是在发布广告时,把关不够严,希望以后严一些,少让读者上当受骗。
山东大众拍卖
百度网站很好,是我最常用的搜索引擎,最常用的新闻看看网站,好呀
买买提蛋挞
百度地图现在用的比较多,出门在外必备的两样,一个是地图,一个是指南针@Q
lucyHuang白羊
总体来说还不错,有时会发生点小意外,比如突然关闭页面,空间无法发布文章。
不错的 天天都要百度一下,有什么不知道的也习惯百度一下了.个要感觉比GOOGLE要好很多
越来越多的广告。。慢慢的 在 变强的同时 也让人觉得垃圾广告越来越多
fenxing657
全球最大的中文搜索网站,很牛,功能很强大。相信百度会做的更好的。
hz无敌之歌
百度口碑网刚接触,但看到的都是说真话道真言的,相信这样可以一直真实下去!
百度,一直信赖,搜索结果都是刚刚的,支持度娘,就是不要老大电话推销啊
吃货的梦想ok
很给力,用着方便,其他搜索引擎都是浮云,就百度的好用,用习惯了
在中文搜索引擎中,处于领先地位,再向垄断方向发展
用习惯了,用的最顺手的就是百度地图。不过卫星地图很一般,县城区域基本处于无卫星地图状态!!!
基本上有什么问题,都能找百度
duncuohds2
我很喜欢百度了。百度一下 就知道。我天天搜索 就用的。看新闻,看视频搜 音乐
泰康橡胶网
内容很丰富,实际我做这个行业,也是要感谢百度文库,在偶然的机会下,了解到毛巾消毒柜行业,并与巾管家签了合同,让我刚开始创业就赚了人生第一桶金,我认为百度真的帮到很多人!
搜索引擎一直用的百度
而且百度的其他应用也不错
例如 百度知道 百度文库
感觉最好用的还是百度云盘、、超级赞、、
时光荏苒sum
一直很喜欢百度,有了它,我的生活方便了许多,也非常喜欢百度的创始人,视他为偶像
您可能感兴趣的标签:
版权所有:商都购物街&&&&Copyright 2016 豫ICP备号&&&&经营许可证编号:豫ICP备号列表网公众号列表活动随时有扫我活动不错过
【尺 寸】长约13CM,宽约7CM,厚约1.5CM,挂绳约17CM,小包约5*7CM【颜 色】红色 紫色 黑色 秋黄色【材 质】
微信扫一扫快速获取电话
《大力水手》《地狱神犬》《龙啸九天》《七彩神龙》
《神龙无敌》《神兽金刚》《巫师之怒》《鱼乐至尊》 《大陆漂移》《金蟾捕鱼》《
微信扫一扫快速获取电话
龙将之狼人传说龙将之七龙球龙将之铁甲飞龙龙将之神兵天降龙将之猪妖戏嫦娥
聚宝盆系列:
聚宝盆之龙凤呈祥聚宝盆之
微信扫一扫快速获取电话
材 质 :底壳为PC硬壳,背面为磨砂质感亮 点:限量Q版卡通情侣图案!手绘美女插画完美触感!超薄质感!无缝贴合!超轻设计!(全部
微信扫一扫快速获取电话
产品的工艺流程:1、首版 俗称母版、原版、样版。流行饰品首版是根据设计师图纸设计的要求,使用铅锡合金板材,通过图纸转移、裁锯、机
微信扫一扫快速获取电话
翔盈数码公司是一家专业生产各类单底壳、清水套、硅胶套和皮套等手机配件的工厂。本公司产品采用优质PC、ABS、硅胶和TPU材料制作
微信扫一扫快速获取电话
IVY又出新品,新品必是精品!超炫iphone外壳卡通系列&&时尚美女&& 宝贝名称:时尚美
微信扫一扫快速获取电话
微信扫一扫快速获取电话
100%实物拍摄,盗图必究!!! 最新推出卡通唯美手机保护壳当季韩国流行色
微信扫一扫快速获取电话
美女贴钻手机壳 iphone 手机保护壳 各色手机壳现货 批发GZ-1119宝贝展示单款50个起批,满200个可混批
微信扫一扫快速获取电话
iPhone5都市美女手机壳 1采用IMD模内高温装饰技术 2精细设计,外壳完美贴合平板 3手感舒适 4防划防刮(不带包装)少1
微信扫一扫快速获取电话
----------------------------------------------------------------
微信扫一扫快速获取电话
适用机型:Apple iPhone 4/4s材质:塑胶+蚕丝宝贝简介:此款保护壳防滑防刮防水,而背壳部分(图案部分)为蚕丝丝纹材
微信扫一扫快速获取电话
——产品名称:亮剑系列超薄金属边框
——产品材质:进口优质航空铝合金材质
——产品性质:边框产品特色:防震防摔
微信扫一扫快速获取电话
全国服务热线:400-602-3211联系人:钟小姐厂家直销iphone4/iphone4S高档硅胶手机保
微信扫一扫快速获取电话
宝贝展示&&&&苹果手机壳芭蕾舞 女孩手机壳宝贝展示会员等级高级会员:订货总金额
微信扫一扫快速获取电话
极限超薄浮雕彩绘iPhone4 4S个性浮雕彩绘系列特殊的工艺造就非凡的品味注重品味的买家不二的选择这是一款只有你拿到手上才能准
微信扫一扫快速获取电话
----------------------------------------------------------------
微信扫一扫快速获取电话
铜嘉电子科技有限公司专业生产批发:键盘膜、屏幕膜、外壳贴、清洁剂、手机膜、手机套、鼠标垫、内胆包、电脑锁、各类硅胶制品等。承接各
微信扫一扫快速获取电话
深圳(香港)吉盛科电子有限公司吉盛科是一家集研发、生产、销售、服务为一体的创新型公司,并且有自己的工厂及研发团队,工厂专业生产数
微信扫一扫快速获取电话
厂家专业生产PC TPU 硅胶材料之手机壳,平板保护套,专家开发苹果,三星,谷歌,亚马逊,诺基亚等最新机器型号产品,专业为外贸,
微信扫一扫快速获取电话
iphone4/4S手机保护壳 美女系衬衫女郎苹果4手机壳
美女系衬衫女郎,唯美漫画风格图案手机壳
原装卡通时尚漫画手机壳系
微信扫一扫快速获取电话
淘宝首家采用苹果原装相同等级特殊的钢化玻璃,目前以全球独创的最新纳米彩绘技术,成功在欧美多个国家近3万人的iPhone4/4S完
微信扫一扫快速获取电话
金属镂空外壳/轻盈/坚固/超薄/耐磨/耐腐蚀适用苹果iPhone4S/iPhone4代 铝合金外壳/保护壳产品名称:ROCK洛克
微信扫一扫快速获取电话
很好的一款挂绳保护壳 材质:TPU软边壳+反光亮面背板二合一适用型号:iphone5/5s;iphone6/6s通用
微信扫一扫快速获取电话
我厂专业开发各式手机壳,手机套,电脑包,电脑皮套等电子产品周边保护包类产品,新颖时尚。可按客人要求开发设计各类新型电子产品保护套
微信扫一扫快速获取电话
保护壳/套品牌: 手雕工坊型号: iPhone4彩绘手机壳保护套质地: 塑料颜色分类: 潇洒女孩 礼服女孩 可爱女孩 爱心女孩
微信扫一扫快速获取电话
RingMagic=单手操作神器单手操作神器=RingMagicRingMagic是单手操作神器的商标 外出旅行必备神器自拍杆
微信扫一扫快速获取电话
产品图片产品特点本公司专业生产加工pc 金属壳 手机外壳,我们保证最优质的质量,全国最低的价格,欢迎广大顾客洽谈合作,销售电话:
微信扫一扫快速获取电话
产品名称 :彩绘浮雕系列
— 产品材料 :德国拜耳UV高端PC材质
—适用机型
产品特色:
&& 采用独特
微信扫一扫快速获取电话
深圳市昆仑科技有限公司是一家致力于手机周边配件产品研发、设计、生产和销售的现代化高科技企业。公司开始从抄数设计,手板加工,模具制
微信扫一扫快速获取电话
深圳万全盛硅橡胶制品有限公司:是一家专业生产各种硅橡胶制品的厂家,拥有标准厂房2000多平方米,八台硫化机,六条滴胶生
微信扫一扫快速获取电话
满200元可混批,混批每款最低2件,也可单款批发! 网站上每天都有新款更新,让您在家中适时了解时尚信息,不出家门,紧跟
微信扫一扫快速获取电话
流沙手机壳 创意手机壳 多功能流沙手机保护套 火狼厂家批发 保护套质地: tpu款式: 保护壳颜色分类: 美少女 皇冠公主 背影
微信扫一扫快速获取电话
产品图片&用途 product photo & application硅胶手机套的作用1、硅胶手机套能保护手机,以防硬物在手机屏
微信扫一扫快速获取电话
微信扫一扫快速获取电话
买家须知发货时间:除国家法定节假日以及特殊情况外,您的订单属于我们公司有现货的产品,我们确保每日正常发货。每日在15点之前的订单
微信扫一扫快速获取电话
东莞市顺嘉电子有限公司是彩绘手机壳、手机保护套、移动电源、手机复古听筒话筒、彩绘手机壳、手机保护套、移动电源、手机复古听筒话筒等
微信扫一扫快速获取电话
我司3D设计师在同行中可算,设计出的.众多贸易公司看到我司设计水平,纷纷来图定制.目前稳定客户已经遍布中国大部分城市.大小批
微信扫一扫快速获取电话
【厂家热销】三星 GalaxyS4 i9500 韩国都市美女插卡皮套手机壳物流信息-- 宝贝上线都有货,请直接拍下并付款!如果出
微信扫一扫快速获取电话
美女与野兽手机壳相关厂家:
美女与野兽手机壳周边分类:
&2017 列表网&琼ICP备号-12&增值电信业务经营许可证B2-&魅友高兴了吗?给你们想要的高通
魅友高兴了吗?给你们想要的高通
30秒会搞机
拼性价比的时代早已过去,现在的手机厂商更注重的是用户的维系和用户的抢占。谁能抓住消费者的内心,谁就可以抢占市场,赢得更多的市场份额。魅蓝靠着性价比赢得大量的用户,凭借这Flyme,用户的粘性也很大。可以说互联网品牌的千元机,除开红米就是魅蓝了。魅蓝NOTE6作为魅蓝独立后的首款机型,还没有发布的时候,单从发布会的邀请函怼各大厂商,就引得很多的话题。而在8月23号下午发布的魅蓝NOTE6,双摄像头再加上晓龙625的加持,这次魅蓝确实打红了这一炮,这也是魅族首款晓龙处理器的机型。魅蓝加上晓龙将会擦出什么样的火花呢?不过正式版要到九月初才会上市,喜欢的朋友们可以期待一下。2016年是魅族混乱的一年。一整年,整整14款机型,定位的重叠,定价的重叠,整个一年的魅族都是失败的。不过在年初,魅族拆分为三大事业部:魅族,魅蓝,Flyme。想必也是想避免去年的尴尬。分离开走量的魅蓝,魅族今年似乎还有什么大动作?魅族的高端系列会不会用上高通的高端处理芯片呢?让我们一起拭目以待。
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
30秒会搞机
百家号 最近更新:
简介: 包罗最新科技资讯,掌握最潮科技动态
作者最新文章

我要回帖

更多关于 欢乐园龙将 的文章

 

随机推荐