第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

?Android開發(fā)經(jīng)驗(yàn)談:webview內(nèi)存泄漏

標(biāo)簽:
Android

看了很多WebView内存泄漏的博文,很多文章都有多多少少的问题。

我便在我自己的博文中仔细针对webView内存泄漏进行分析。

看这篇文章的人都应该对webview深恶痛绝

怎么总是释放不掉呢???

释放不掉的原因是啥呢???

为啥特么的总是阴魂不散呢???

答:webView内部的一些线程持有activity对象,导致activity无法释放。继而内存泄漏。

解决:

方案一:退出程序调用

System.exit(0);

弊:太暴力,只能在程序退出后清除持有。

方案二:activity弱应用持有

private WeakReference<BaseWebActivity> webActivityReference = new WeakReference<BaseWebActivity>(this);
bridgeWebView = new BridgeWebView(webActivityReference .get());
bridgeWebView.setLayoutParams(params);
container.addView(bridgeWebView);

在销毁中执行
 @Override
    protected void onDestroy() {
        super.onDestroy();
        //防止webView内存泄漏
        if (bridgeWebView != null) {
            //先从父容器中移除webview,然后再销毁webview
            ViewParent parent = bridgeWebView.getParent();
            if (parent != null) {
                ((ViewGroup) parent).removeView(bridgeWebView);
            }
            bridgeWebView.stopLoading();
            // 退出时调用此方法,移除绑定的服务,否则某些特定系统会报错
            bridgeWebView.getSettings().setJavaScriptEnabled(false);
            bridgeWebView.clearHistory();
            bridgeWebView.clearView();
            bridgeWebView.removeAllViews();
            try {
                bridgeWebView.destroy();
            } catch (Throwable ex) {

            }
            bridgeWebView = null;
            this.webActivityReference.clear();
            this.webActivityReference = null;
        }
    }

说明:

看了很多文章,文中大多都建议不在xml中写webview,都没有说明原因。主要是xml中创建的webview持有Activity的context对象

方案三:新建进程

缺点:新建进程比较麻烦的在于进程间通讯

还存在如下问题

  • 静态成员和单例模式失效

  • 线程同步机制失效

  • SharedPreferences 可靠性降低

  • Application 被多次创建

优点:

增加应用可用的内存空间,不与主进程竞争内存空间,不使用进程则销毁。

通讯方式

  • AIDL:功能强大,支持进程间一对多的实时并发通信,并可实现 RPC (远程过程调用)。

  • Messenger:支持一对多的串行实时通信, AIDL 的简化版本。

  • Bundle:四大组件的进程通信方式,只能传输 Bundle 支持的数据类型。

  • ContentProvider:强大的数据源访问支持,主要支持 CRUD 操作,一对多的进程间数据共享,例如我们的应用访问系统的通讯录数据。

  • BroadcastReceiver:即广播,但只能单向通信,接收者只能被动的接收消息。

  • 文件共享:在非高并发情况下共享简单的数据。

  • Socket:通过网络传输数据。

实例:

//xml配置activity,在remoteweb进程中
<activity android:name=".WebActivity"
   android:process=":remoteweb"/>


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
移動(dòng)開發(fā)工程師
手記
粉絲
81
獲贊與收藏
3604

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消