win7內(nèi)存泄漏怎么解決 win7內(nèi)存泄露如何解決

2020-12-03 14:17

在電腦上,我們都會保存一些重要的文件,很怕會被泄漏出去,最近有win7用戶卻遇到內(nèi)存泄露的情況,也不知道要怎么解決,相信很人遇到這種情況的也不會解決,那么win7內(nèi)存泄露如何解決呢,下面小編給大家分享win7內(nèi)存泄漏的解決方法。

推薦系統(tǒng):win7旗艦版32位系統(tǒng)下載

解決方法:

1、在Android開發(fā)中,我們經(jīng)常會使用Handler來控制主線程UI程序的界面變化,使用非常簡單方便,但是稍不注意,很容易引發(fā)內(nèi)存泄漏。

win7內(nèi)存泄漏怎么解決_win7內(nèi)存泄露如何解決

2、我們知道,Handler、Message、MessageQueue是相互關(guān)聯(lián)在一起的,Handler通過發(fā)送消息Message與主線程進(jìn)行交互,如果Handler發(fā)送的消息Message尚未被處理,該Message及發(fā)送它的Handler對象將被MessageQueue一直持有,這樣就可能會導(dǎo)致Handler無法被回收。

win7內(nèi)存泄漏怎么解決_win7內(nèi)存泄露如何解決

3、這是一個單例模式的標(biāo)準(zhǔn)寫法,表面上看沒有任何問題,但是細(xì)心的同學(xué)會發(fā)現(xiàn),構(gòu)建該單例的一個實例時需要傳入一個Context,此時傳入的Context就非常關(guān)鍵,如果此時傳入的是Activity,由于Context會被創(chuàng)建的實例一直持有,當(dāng)Activity進(jìn)入后臺或者開啟設(shè)置里面的不保留活動時,Activity會被銷毀,但是單例持有它的Context引用,Activity又沒法銷毀,導(dǎo)致了內(nèi)存泄漏。

win7內(nèi)存泄漏怎么解決_win7內(nèi)存泄露如何解決

4、如果此時傳入的Context是ApplicationContext,由于ApplicationContext的生命周期是和app一致的,不會導(dǎo)致內(nèi)存泄漏。但是我們不能指望使用這個單例的用戶始終傳入期望的Context,因此需要對這個單例設(shè)計進(jìn)行調(diào)整,可以在構(gòu)造函數(shù)中對mContext賦值改為this.mContext = context.getApplicationContext;當(dāng)然,也可以直接不讓用戶傳入context。

win7內(nèi)存泄漏怎么解決_win7內(nèi)存泄露如何解決

5、重構(gòu)Singleton,把構(gòu)建單例時的context去掉,避免外面使用的人傳入錯誤參數(shù)。

win7內(nèi)存泄漏怎么解決_win7內(nèi)存泄露如何解決

6、當(dāng)然,也可以把InnerClass單獨(dú)抽出來作為一個內(nèi),寫成單例模式,完成同樣的功能,同時也可以避免內(nèi)存。

win7內(nèi)存泄漏怎么解決_win7內(nèi)存泄露如何解決

以上就是win7內(nèi)存泄漏的解決方法,有遇到內(nèi)存泄漏的話,可以按上面的方法來進(jìn)行解決。

網(wǎng)友評論

相關(guān)閱讀