AutoDispose使用

前言

RxJava已經(jīng)深入民心,即使沒用過也聽說過了小作,真沒用過的話看看我的其他文章有介紹亭姥。但是RxJava使用不當會導致內(nèi)存泄漏,真的是很蛋疼啊顾稀,就不能再完美點嗎达罗。那有沒有好的解決方式呢?目前來說可以手動管理去掉訂閱,也可以采用RxLifecycle來管理粮揉。采用RxLifycycle來管理的話,需要繼承RxActivity / RxFragment侨拦,我覺得這框架就有點侵入式了狱从,一直以來我都是手動管理叠纹,但是也不爽〉跬荩現(xiàn)在冒窍,有一個新的庫综液,AutoDispose可以完美的解決這種問題了儒飒。

環(huán)境準備

Android Studio 3.1.4

閱讀本文你將學到:

  1. AutoDispose的使用
  2. Android Studio Profiler 內(nèi)存泄漏分析
  3. 推薦一個可以快速開發(fā)的庫桩了,開箱即用

正文

引入AutoDispose:compile 'com.uber.autodispose:autodispose-android-archcomponents:1.0.0-RC2'

為了演示RxJava2的內(nèi)存泄漏,我就隨便復制了一段很流行的RxJava代碼蕉扮。Demo邏輯很簡單,在MainActivity里有個按鈕喳钟,點擊跳轉(zhuǎn)到SecondActivity奔则,并在oncreat()里放入以下代碼:

Observable.interval(1, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                //AutoDispose的使用就是這句
                ①//.as(AutoDispose.<Long>autoDisposable(AndroidLifecycleScopeProvider.from(this)))
                .subscribe(new Observer<Long>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Long aLong) {
                Log.i("接收數(shù)據(jù),當前線程"+Thread.currentThread().getName(), String.valueOf(aLong));
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });

一開始把標為①的那行注釋掉,來觸發(fā)內(nèi)存泄漏疾呻。那怎么用AS的profiler來檢測呢?


profiler.png

點擊這個圖標啟動app,選擇你的手機年缎,對應包名单芜,雙擊MEMORY視圖洲鸠,然后點擊Main的按鈕啟動Second 3次扒腕。其實此時不打開profiler內(nèi)存分析萤悴,通過lagcat的日志就能看出內(nèi)存泄漏了覆履,因為關(guān)閉了SecondActivity硝全,日志還在打印伟众。


未使用AutoDispose的內(nèi)存圖.png

一圖勝千言赂鲤,正常來說数初,主動觸發(fā)GC泡孩,沒用的內(nèi)存會被系統(tǒng)清理掉,但是第一步我們就觸發(fā)了GC吮播,結(jié)果第四步還能搜出SecondActivity的內(nèi)存意狠,這就表明泄漏了环戈。
好了,現(xiàn)在我們把標為①的那行注釋去掉遮晚,同樣啟動profiler來觀察:


使用了AutoDispose的內(nèi)存圖.png

同樣的操作,這就很明顯了萧求。使用了AutoDispose后饭聚,內(nèi)存里已經(jīng)找不到SecondActivity的內(nèi)存了。這表明箕速,AutoDispose起了作用盐茎。

附上

AutoDispose:https://github.com/uber/AutoDispose
demo(也是一個簡單的快速開發(fā)庫):https://github.com/twangithub/TwanBase

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市窑业,隨后出現(xiàn)的幾起案子常柄,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件相种,死亡現(xiàn)場離奇詭異蚂子,居然都是意外死亡,警方通過查閱死者的電腦和手機别渔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門哎媚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人买喧,你說我怎么就攤上這事淤毛〉偷” “怎么了蔗蹋?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵绎橘,是天一觀的道長。 經(jīng)常有香客問我稠鼻,道長候齿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮灭必,結(jié)果婚禮上禁漓,老公的妹妹穿的比我還像新娘播歼。我一直安慰自己,他們只是感情好谒撼,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布善榛。 她就那樣靜靜地躺著,像睡著了一般咒循。 火紅的嫁衣襯著肌膚如雪叙甸。 梳的紋絲不亂的頭發(fā)上熔萧,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音辙谜,去河邊找鬼俺榆。 笑死,一個胖子當著我的面吹牛装哆,可吹牛的內(nèi)容都是我干的肋演。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼烂琴,長吁一口氣:“原來是場噩夢啊……” “哼爹殊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奸绷,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤梗夸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后号醉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體反症,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年畔派,在試婚紗的時候發(fā)現(xiàn)自己被綠了铅碍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡线椰,死狀恐怖胞谈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情憨愉,我是刑警寧澤烦绳,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站配紫,受9級特大地震影響径密,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躺孝,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一享扔、第九天 我趴在偏房一處隱蔽的房頂上張望底桂。 院中可真熱鬧,春花似錦惧眠、人聲如沸戚啥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猫十。三九已至,卻和暖如春呆盖,著一層夾襖步出監(jiān)牢的瞬間拖云,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工应又, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宙项,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓株扛,卻偏偏與公主長得像尤筐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洞就,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容