Android記憶體最佳化之ViewPager的記憶體最佳化

來源:互聯網
上載者:User

標籤:position   android中   apt   基本   例子   使用   很多   map   dap   

    我們知道,在Android中ViewPager主要是用於多個View的切換,本文不會介紹ViewPager的基本使用,而是介紹怎麼對ViewPager的記憶體最佳化。ViewPager是繼承於ViewGroup,所以它裡面會有很多的子View,這裡的目的就是對那些子View的複用,同時如果還有ImageView的話,還對Bitmap的回收進行介紹。

ViewPager的基本原理

    由於筆者的水平有限,所以對ViewPager的基本介紹可能不是很正確,這裡介紹ViewPager的基本原理目的是:有利於對PagerAdaper代碼的理解。

    筆者認為,ViewPager是Google爸爸遺忘的控制項,因為凡是涉及到Adapter的控制項(MVC模式),內部幾乎都實現了ViewHolder來對View複用。在MVC模式中的控制項中,如果不對View進行複用的話,意思就是說,每一個Item都要建立一個View對象,而每個View被ViewGroup(這裡用ViewGroup來表示,通常例子是有ListView、ViewPager)持有,所以導致View對象不能被GC正常的回收,除非當前的ViewPager被回收了,或者當前的Activity聲明周期結束了。

    所以在ViewPager中,View的複用是非常的重要。

    下面將簡單的介紹一些ViewPager的基本原理。

    1.PagerAdapter的介紹

    不出意外,凡是需要載入多個View的控制項幾乎都是MVC模式,也就是說,有自己的Adapter。其實這類的控制項,我們見到的不少,比如,RecyclerView,ListView、GridView等等。

    ViewPager也是屬於這一類的,其實如果我們想要在ViewPager中載入多個View(這裡不涉及到載入Fragment),要用到的Adapter就是PagerAdapter。

    PagerAdapter是一個抽象類別,這裡將對PagerAdapter內部的幾個方法進行簡單的介紹。

        (1).getCount方法

            這個方法通常來擷取ViewPager需要載入的資料個數,這個方法非常的常見,在RecyclerView和ListView的Adapter幾乎都有這個方法。

        (2).isViewFromObject(View view, Object object)方法

            這個方法是來判斷當前的View跟傳入進來的Object是否有關係。這裡我們通常的寫的是return view == object。其實這種寫法是有問題的。首先簡單的介紹一下,在PagerAdapter每一個View是以key-value的索引值對來儲存的,這裡的object是View的key,之所以我們在這裡寫view == object沒有錯誤,是因為我們在instantiateItem方法裡面返回的是當前的View,而正確的理解不是返回的是當前View,而是當前View的key。由於當前的View的key和value都是同一個對象,所以這裡這樣寫是沒有錯的。但是實際上不是這樣理解,這裡需要注意!

        (3).instantiateItem(ViewGroup container, int position)方法和 destroyItem(ViewGroup container, int position, Object object)方法

            這裡將兩個方法合并起來講。
            首先,instantiateItem方法是用來初始化當前的View,傳回值為Object類型,實際上不是當前的View,而是

Android記憶體最佳化之ViewPager的記憶體最佳化

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.