欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android?webView加載數據時內存溢出問題及解決

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

Android webView加載數據時內存溢出

今天使用webView加載數據時   如果數據太長就會崩潰,造成內存溢出,在網上查找了一下資料之后   終于把它解決了,謹在此記錄

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里面加載數據了  

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

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

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

大功告成!

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

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

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

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

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

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

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

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

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

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

所以當Activity退出后,sInfo仍然引用了Activity,Activity不能被回收,這就導致了內存泄露。

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

常見 (Handler,Thread,AsyncTask)

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

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

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

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

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

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

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

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

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

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

當需要大量使用Bitmap的時候,試著把它們緩存在數組中實現復用。

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

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

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

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

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

總結

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

相關文章

  • Android跨應用啟動實例詳解

    Android跨應用啟動實例詳解

    這篇文章主要介紹了 Android跨應用啟動實例詳解的相關資料,需要的朋友可以參考下
    2017-04-04
  • Android 如何保證service在后臺不被kill

    Android 如何保證service在后臺不被kill

    本文主要介紹了Android 如何保證service在后臺不被kill的方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 給Android初學者的Gradle知識普及

    給Android初學者的Gradle知識普及

    剛學 Android 不久,對 Gradle 不懂,看了很多資料依然一知半解,很多人都這樣覺得,表示同感,下面小編來給大家講講 Gradle相關知識,需要的朋友跟隨小編一起來學習一下
    2018-09-09
  • Android仿新浪微博oauth2.0授權界面實現代碼(2)

    Android仿新浪微博oauth2.0授權界面實現代碼(2)

    這篇文章主要為大家詳細介紹了Android仿新浪微博oauth2.0授權界面實現代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android實現WebView點擊攔截跳轉原生

    Android實現WebView點擊攔截跳轉原生

    這篇文章主要介紹了Android實現WebView點擊攔截跳轉原生,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android自定義控件實現帶數值和動畫的圓形進度條

    Android自定義控件實現帶數值和動畫的圓形進度條

    這篇文章主要為大家詳細介紹了Android自定義控件實現帶數值和動畫的圓形進度條,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android RecyclerView網格布局示例解析

    Android RecyclerView網格布局示例解析

    這篇文章主要介紹了Android RecyclerView網格布局示例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • Android幀式布局實現自動切換顏色

    Android幀式布局實現自動切換顏色

    這篇文章主要為大家詳細介紹了Android幀式布局實現自動切換顏色,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android Jetpack組件DataBinding詳解

    Android Jetpack組件DataBinding詳解

    這篇文章主要介紹了Android Jetpack組件DataBinding,DataBinding有很多優(yōu)勢,其中最明顯是代碼更加簡潔,可讀性會更高。部分和UI控件有關的代碼可以在布局文件當中完成,本文給大家詳細講解,需要的朋友可以參考下
    2022-10-10
  • Android 極光推送別名與標簽方式

    Android 極光推送別名與標簽方式

    這篇文章主要介紹了Android 極光推送別名與標簽方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評論