最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android?webView加載數(shù)據(jù)時內(nèi)存溢出問題及解決

 更新時間:2022年12月05日 11:03:21   作者:代號臥底  
這篇文章主要介紹了Android?webView加載數(shù)據(jù)時內(nèi)存溢出問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Android webView加載數(shù)據(jù)時內(nèi)存溢出

今天使用webView加載數(shù)據(jù)時   如果數(shù)據(jù)太長就會崩潰,造成內(nèi)存溢出,在網(wǎng)上查找了一下資料之后   終于把它解決了,謹(jǐn)在此記錄

1.不要在XML里面寫webView 可以使用一個占位布局

<FrameLayout
? ? android:id="@+id/layoutWebView"
? ? android:layout_width="match_parent"
? ? android:layout_height="wrap_content"
? ? android:visibility="gone"/>

2.在代碼中動態(tài)創(chuàng)建一個webView   把這個webView放到FrageLayout這個布局中

webView = new WebViewMod(getApplicationContext());
WebSettings settings = webView.getSettings();
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
layoutWebView.addView(webView);

3.到這里基本就OK了,你可以直接在這個WebView里面加載數(shù)據(jù)了  

WebViewMod   這個是我自定義的一個webView     用系統(tǒng)的WebView效果是一樣的

4.在當(dāng)前Activity銷毀的時候  記得在onDestroy方法中銷毀這個WebView

@Override
protected void onDestroy() {
? ? webView.removeAllViews();
? ? webView.destroy();
? ? super.onDestroy();
}

大功告成!

Android內(nèi)存問題 (內(nèi)存溢出 內(nèi)存泄漏 內(nèi)存抖動)

內(nèi)存溢出:指程序在申請內(nèi)存時,沒有足夠的內(nèi)存空間供其使用,出現(xiàn)out of memory

Android系統(tǒng)為每個應(yīng)用程序申請到的內(nèi)存有限,一般為64M或者128M等,我們可以在清單文件中進(jìn)行配置,android:largeheap = "true" 從而給APP申請更大的內(nèi)存空間;

內(nèi)存泄漏: 指程序在申請內(nèi)存后,被某個對象一直持有,無法釋放已申請的內(nèi)存空間

一次內(nèi)存泄露危害可以忽略,但內(nèi)存泄露堆積后果很嚴(yán)重,無論多少內(nèi)存,遲早會被占光。

區(qū)別:單例模式在Android開發(fā)中會經(jīng)常用到,但是如果使用不當(dāng)就會導(dǎo)致內(nèi)存泄露。因為單例的靜態(tài)特性使得它的生命周期同應(yīng)用的生命周期一樣長,如果一個對象已經(jīng)沒有用處了,但是單例還持有它的引用,那么在整個應(yīng)用程序的生命周期它都不能正常被回收,從而導(dǎo)致內(nèi)存泄露

如何避免呢?全局的上下文Application Context就是應(yīng)用程序的上下文,和單例的生命周期一樣長,這樣就避免了內(nèi)存泄漏。單例模式對應(yīng)應(yīng)用程序的生命周期,所以我們在構(gòu)造單例的時候盡量避免使用Activity的上下文,而是使用Application的上下文

靜態(tài)變量導(dǎo)致內(nèi)存泄露?靜態(tài)變量存儲在方法區(qū),它的生命周期從類加載開始,到整個進(jìn)程結(jié)束。

一旦靜態(tài)變量初始化后,它所持有的引用只有等到進(jìn)程結(jié)束才會釋放。

如何解決呢?Info作為Activity的靜態(tài)成員,并且持有Activity的引用,但是sInfo作為靜態(tài)變量,生命周期肯定比Activity長。

所以當(dāng)Activity退出后,sInfo仍然引用了Activity,Activity不能被回收,這就導(dǎo)致了內(nèi)存泄露。

非靜態(tài)內(nèi)部類導(dǎo)致內(nèi)存泄露?非靜態(tài)內(nèi)部類(包括匿名內(nèi)部類)默認(rèn)就會持有外部類的引用,當(dāng)非靜態(tài)內(nèi)部類對象的生命周期比外部類對象的生命周期長時,就會導(dǎo)致內(nèi)存泄露。

常見 (Handler,Thread,AsyncTask)

未取消注冊或回調(diào)導(dǎo)致內(nèi)存泄露?比如我們在Activity中注冊廣播,如果在Activity銷毀后不取消注冊,那么這個剛播會一直存在系統(tǒng)中,同上面所說的非靜態(tài)內(nèi)部類一樣持有Activity引用,導(dǎo)致內(nèi)存泄露。因此注冊廣播后在Activity銷毀后一定要取消注冊

集合中的對象未清理造成內(nèi)存泄露?在循環(huán)中把引用o釋放了,但是它被添加到了objectList中,所以objectList也持有對象的引用,此時該對象是無法被GC的。因此對象如果添加到集合中,還必須從中刪除,最簡單的方法防止集合類泄漏內(nèi)存的方法

解決辦法:置空集合對象即可

資源未關(guān)閉或釋放導(dǎo)致內(nèi)存泄露?在使用流或者等資源時要及時關(guān)閉。這些資源在進(jìn)行讀寫操作時通常都使用了緩沖,如果及時不關(guān)閉,這些緩沖對象就會一直被占用而得不到釋放,以致發(fā)生內(nèi)存泄露。因此我們在不需要使用它們的時候就及時關(guān)閉,以便緩沖能及時得到釋放,從而避免內(nèi)存泄露

解決辦法Webview下面的持有Activity引用,造成Webview內(nèi)存無法釋放,即使是調(diào)用了Webview.destory()}等方法都無法解決問題(Android5.1之后)。

最終的解決方案是:在銷毀WebView之前需要先將WebView從父容器中移除,然后在銷毀WebView。

內(nèi)存抖動:是指在短時間內(nèi)有大量的對象被創(chuàng)建或者被回收的現(xiàn)象,內(nèi)存抖動出現(xiàn)原因主要是頻繁(很重要)在循環(huán)里創(chuàng)建對象(導(dǎo)致大量對象在短時間內(nèi)被創(chuàng)建,由于新對象是要占用內(nèi)存空間的而且是很頻繁

內(nèi)存抖動結(jié)果:如果抖動很頻繁,會導(dǎo)致垃圾回收機(jī)制頻繁運(yùn)行(短時間內(nèi)產(chǎn)生大量對象,需要大量內(nèi)存,而且還是頻繁抖動,就可能會需要回收內(nèi)存以用于產(chǎn)生對象,垃圾回收機(jī)制就自然會頻繁運(yùn)行了)。綜上就是頻繁內(nèi)存抖動會導(dǎo)致垃圾回收頻繁運(yùn)行。

盡量避免在循環(huán)體內(nèi)創(chuàng)建對象,應(yīng)該把對象創(chuàng)建移到循環(huán)體外。

注意自定義View的onDraw()方法會被頻繁調(diào)用,所以在這里面不應(yīng)該頻繁的創(chuàng)建對象。

當(dāng)需要大量使用Bitmap的時候,試著把它們緩存在數(shù)組中實現(xiàn)復(fù)用。

對于能夠復(fù)用的對象,同理可以使用對象池將它們緩存起來。

小結(jié):JVM以Class為執(zhí)行單元,Android虛擬機(jī)以Dex執(zhí)行單元,編譯流程JVM直接通過Javac即可加載。

Android 虛擬機(jī)需要先編譯成dex,然后編譯成apk。最后執(zhí)行

Android  Art虛擬機(jī)在安裝的時候講dex緩存本地機(jī)器碼,安裝比較慢,耗存儲空間

Android  Dalvik虛擬機(jī)在程序運(yùn)行過程中進(jìn)行翻譯。節(jié)省空間,耗cpu時間。以空間換時間的典型

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android中Activity啟動默認(rèn)不顯示輸入法解決方法

    Android中Activity啟動默認(rèn)不顯示輸入法解決方法

    這篇文章主要介紹了Android中Activity啟動默認(rèn)不顯示輸入法解決方法,一般是因為包含checkbox控件導(dǎo)致Activity啟動默認(rèn)不顯示輸入法,本文給出了正確解決方法,需要的朋友可以參考下
    2015-06-06
  • android調(diào)試工具adb命令大全

    android調(diào)試工具adb命令大全

    這篇文章主要介紹了android調(diào)試工具adb的作用、使用方法以及命令大全,需要的朋友可以參考下
    2014-03-03
  • 深入理解Android 5.0中的Toolbar

    深入理解Android 5.0中的Toolbar

    相信大家都有所體會,搜索Toolbar相關(guān)文章滿天飛,但是大都不是很全面,每次要用到的時候又要重頭過濾一遍。而且隨著版本升級很多較早的文章的方法已經(jīng)失效,最近剛好好用到Toolbar,就將相關(guān)配置整理下,方便以后需要的時候或者有需要的朋友們參考學(xué)習(xí)。
    2017-01-01
  • 深入Android Handler與線程間通信ITC的詳解

    深入Android Handler與線程間通信ITC的詳解

    本篇文章是對Android的Handler與線程間通信ITC進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Android日志文件的讀寫工具類

    Android日志文件的讀寫工具類

    這篇文章主要為大家詳細(xì)介紹了Android日志文件的讀寫工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • ionic監(jiān)聽android返回鍵實現(xiàn)“再按一次退出”功能

    ionic監(jiān)聽android返回鍵實現(xiàn)“再按一次退出”功能

    本篇文章主要介紹了ionic監(jiān)聽android返回鍵實現(xiàn)“再按一次退出”功能,非常具有實用價值,需要的朋友可以參考下
    2018-02-02
  • 如何正確使用Android線程詳解

    如何正確使用Android線程詳解

    線程是程序員進(jìn)階的一道重要門檻。除了了解各類開線程的API之外,更需要理解線程本身到底是個什么樣的存在,并行是否真的高效?系統(tǒng)是怎么樣去調(diào)度線程的?開線程的方式那么多,什么樣的姿勢才正確?下面通過本文來好好再學(xué)習(xí)下。
    2016-08-08
  • Android如何給Textview添加菜單項詳解(Java)

    Android如何給Textview添加菜單項詳解(Java)

    TextView是android里面用的最多的控件,TextView類似一般UI中的Label,TextBlock等控件,只是為了單純的顯示一行或多行文本,下面這篇文章主要給大家介紹了關(guān)于Android如何給Textview添加菜單項的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • android新建草稿刪除后下次開機(jī)還會顯示保存的草稿

    android新建草稿刪除后下次開機(jī)還會顯示保存的草稿

    android 新建一個草稿,保存,然后全部刪除會話,關(guān)機(jī)再開機(jī)后還會顯示保存的草稿,下面與大家分享下具體的解決方法
    2013-06-06
  • Android使用硬件加速的方式

    Android使用硬件加速的方式

    硬件加速是指利用設(shè)備的硬件資源來加速圖形渲染和圖像處理等操作,以提高應(yīng)用程序的性能和用戶體驗,Android使用硬件加速的目的是為了提高圖形渲染的性能和效果,本文給大家詳細(xì)介紹了Android如何使用硬件加速,需要的朋友可以參考下
    2023-10-10

最新評論

承德县| 麻栗坡县| 荣昌县| 哈密市| 长寿区| 佳木斯市| 九江县| 洛南县| 晋州市| 安庆市| 息烽县| 岳池县| 吉首市| 故城县| 略阳县| 谢通门县| 额尔古纳市| 阿尔山市| 临潭县| 乳源| 香河县| 绥化市| 黄龙县| 泸定县| 舟山市| 敖汉旗| 北宁市| 达州市| 黔西| 建始县| 莱州市| 新晃| 怀来县| 郑州市| 武乡县| 石阡县| 方山县| 安图县| 铁岭县| 德惠市| 长春市|