第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android必學-異步加載

難度中級
時長 1小時57分
學習人數(shù)
綜合評分9.70
220人評價 查看評價
9.9 內容實用
9.7 簡潔易懂
9.5 邏輯清晰
  • Android異步加載的總結。除了LruCache,我們還可以使用DiskLruCache這個第三方的類來實現(xiàn)“二級緩存”。異步加載不僅僅是獲取網(wǎng)絡資源,我們可以加所有耗時的操作都看成異步加載,所有通過耗時的操作獲取的結果我們都可以通過緩存來提高效率,比如我們可以利用這里的LruCache和DiskLruCache(這個緩存一般是用于緩存從網(wǎng)絡獲取的圖片,視頻等大的資源,這個時候我們一般和LruCache結合使用),使用Cache有個缺點,就是我們不能保證我們的數(shù)據(jù)是實時的,所以在realtime需求高的應用中,我們不應該使用緩存。而對于本地資源,我們很少用緩存的,就算是操作SQLite數(shù)據(jù)庫,我們也很少會用到LruCache,但是也有使用的。
    查看全部
    1 采集 收起 來源:總結

    2016-07-24

  • setTag(url)作為標示,避免異步加載圖片信息錯亂
    查看全部
    0 采集 收起 來源:使用Thread

    2016-07-21

  • Android異步加載
    查看全部
  • 我運行我的程序的時候崩潰了!哈哈!找了一下Bug,才發(fā)現(xiàn)我的圖片URL不唯一(我沒有使用慕課網(wǎng)的API,使用的自己搭建的簡單后臺,因此圖片大都是重復的)。本節(jié)教程使用URL作為ListView中每一個Item中ImageView的唯一標識,那么當使用findViewByTag(url)的時候就會返回空。因此程序在第一次加載的時候不會設置圖片,接下來滾動的時候就會出現(xiàn)空指針異常! imageView = (ImageView) mListView.findViewWithTag(url); Log.e("info", url + " imageView value " + imageView); 輸出結果為: http://192.168.0.103:8080/Umooc/Image/1.png imageView value null 07-16 19:00:56.636 1761-1761/xq.listviewdemo E/info: http://192.168.0.103:8080/Umooc/Image/2.jpg imageView value null 07-16 19:00:56.636 1761-1761/xq.listviewdemo E/info: http://192.168.0.103:8080/Umooc/Image/1.png imageView value null 07-16 19:00:56.636 1761-1761/xq.listviewdemo E/info: http://192.168.0.103:8080/Umooc/Image/2.jpg imageView value null 解決辦法:不再使用FindViewWithTag獲取ImageView.而是獲取Adapter中的ViewHolder中的ImageView. View view = getView(position, null, null); ViewHolder viewHolder = (ViewHolder) view.getTag();
    查看全部
  • android異步加載
    查看全部
    0 采集 收起 來源:總結

    2016-07-15

  • 當我們將加載圖片的控制權交給了onScrollStateChanged()這個回調函數(shù)之后,我們會遇到一個問題,當程序剛啟動的時候,我們的圖片是不會被加載的,原因在于一開始的時候onScrollStateChanged()這個回調函數(shù)是不會被調用的,所以我們需要對開始的圖片進行“預加載”。 我們將“預加載”放在onScroll方法中去進行,因為這個回調會在ListView啟動和繪制的時候被多次調用。為了保證我們的圖片加載是在ListView被繪制出來之后進行的,我們需要判斷visibleItemCount這個參數(shù)是否大于0。
    查看全部
  • ImageAdapter中implement ListView.onScoll...Listen..{//需要綁定自己的滾動監(jiān)聽事件 listView.setOnScoll...(this); onScollStatuChage(){//每次滾動時狀態(tài)發(fā)生改變調用 //加載start到end的圖片 //取得之間的圖片url使用sync..Task去下載 并將task保存到Set<SyncTask>中,便于滾動時cancel()所有的下載,ImageView通過ListView.findViewWithTag(url)獲取(在baseAdapter中設置過了,所以可以取到); } onScoll(){//每次滾動都會執(zhí)行 //獲取第一個和最后一個的num位置 } } 在syncTask的onPost..(){ //在最后顯示圖片后需要移除Set中的此對象 set<SyncTask>.remove(this); }
    查看全部
  • 異步加載——圖片加載優(yōu)化 1. 創(chuàng)建一個靜態(tài)String[]將所有要顯示的圖片的地址保存起來 public static String[] URLStrings;//用來保存當前所有需要顯示的圖片的url地址 public NewsAdapter(Context context, List<NewsBean> mListData) { super(); this.mList = mListData; mInflater = LayoutInflater.from(context); mImageLoader = new ImageLoader(); URLStrings = new String[mListData.size()]; for (int i = 0; i<mListData.size(); i++){ URLStrings[i] = mListData.get(i).imageUrl; }} 2. 創(chuàng)建一個方法,加載從start到end的所有圖片 public void loadImages(int start, int end){ for (int i = start; i < end; i++){ //因為URLStrings是靜態(tài)的,所以可以直接使用 String url = NewsAdapter.URLStrings[i]; //從緩存中獲取對應的圖片并判斷 Bitmap bitmap = getBitmapFromCache(url); if(bitmap == null){ NewsAsyncTask task = new NewsAsyncTask(url); task.execute(url); mTasks.add(task); }else { //從緩存中直接獲取數(shù)據(jù)讓iamgeView顯示,這里imageView是從url的tag得來的 ImageView imageView = (ImageView) mListView.findViewWithTag(url); imageView.setImageBitmap(bitmap); }}} 3. 改寫showImageByAsyncTask(),讓顯示圖片的操作交給scroll的監(jiān)聽事件 (如圖) 當bitmap不在緩存時,也不去加載圖片
    查看全部
  • 1.聲明lruCache LruCache<String,Bitmap> string是圖片名字,Bitmap是圖片對象 2.獲取最大可用內存,將一部分內存作為緩存,創(chuàng)建lruCache ,重寫sizeOf方法,返回圖片大小,在每次存入緩存的時候調用 3.創(chuàng)建方法存放圖片到緩存和從緩存中取出圖片 4.在主線程中判斷圖片是否存在緩存中,如果不存在異步加載圖片,存在則直接使用 5.在doInBackground方法中,從網(wǎng)絡上獲取圖片,將不在緩存中的圖片加入緩存 這樣做,可以把下載的圖片放入緩存,在刷新列表的時候不用每次都去加載圖片,做到了以內存換效率
    查看全部
    0 采集 收起 來源:LruCache緩存(下)

    2018-03-22

  • 異步加載——LruCache緩存 (接上一筆記) (3)改寫showImageByAsyncTask()和doInBackground() bitmap不在緩存中時才下載;下載完之后保存在cache中。 public void showImageByAsyncTask(ImageView imageView, String url){ //從緩存中獲取對應的圖片并判斷 Bitmap bitmap = getBitmapFromCache(url); if(bitmap == null){ new NewsAsyncTask(imageView, url).execute(url); }else { //從緩存中直接獲取數(shù)據(jù)讓iamgeView顯示 imageView.setImageBitmap(bitmap); } } protected Bitmap doInBackground(String... params) { String url = params[0]; Bitmap bitmap = getBitmapFromURL(url); if(bitmap!=null){ addBitmapToCache(url, bitmap); } return bitmap; } (4)最后要在創(chuàng)建Adapter對象時給ImageLoader的對象初始化,直接使用該對象。這樣不會每次都創(chuàng)建LruCache。 public NewsAdapter(Context context, List<NewsBean> mListData) { super(); this.mList = mListData; mInflater = LayoutInflater.from(context); mImageLoader = new ImageLoader(); } //通過AsyncTask執(zhí)行顯示ImageView額操作 mImageLoader.showImageByAsyncTask(viewHolder.imageView, urlString);
    查看全部
    0 采集 收起 來源:LruCache緩存(下)

    2018-03-22

  • 異步加載——LruCache緩存 1. Lrc——Least Recently Used,LruCache類來實現(xiàn)緩存算法。 LruCache類將內容保存在內存中,并以一定的方法管理這些內容,來實現(xiàn)緩存管理。 2. LrcCache本質是一個Map,底層是通過HashMap實現(xiàn)的。 所以在使用LruCache時可以通過調用set()和get()方法使用。 3. 使用步驟: (1)先創(chuàng)建一個LruCache,并在構造函數(shù)中初始化它。 注意:通過匿名內部類的方式實現(xiàn)sizeOf()方法,sizeOf()方法用來獲取每次緩存的對象的大小,默認返回元素的個數(shù)。sizeOf()方法在每次元素加入緩存時調用。 private LruCache<String, Bitmap> mLruCache; public ImageLoader() { //通過Runtime類獲取運行時最大內存 int maxMemory = (int) Runtime.getRuntime().maxMemory(); int cacheSize = maxMemory/4; mLruCache = new LruCache<String, Bitmap>(cacheSize){ protected int sizeOf(String key, Bitmap value) { return value.getByteCount(); }};} (2)兩個set()和get()方法,分別是加入元素到緩存以及從緩存中獲取數(shù)據(jù) public void addBitmapToCache(String url, Bitmap bitmap){ if(getBitmapFromCache(url)==null){ mLruCache.put(url, bitmap); } } public Bitmap getBitmapFromCache(String url){ return mLruCache.get(url); } (3)改寫showImageByAsyncTask()和doInBackground() (如圖)bitmap不在緩存中時才下載;下載完之后保存在cache中。 (4)最后要在創(chuàng)建Adapter對象時給ImageLoader的對象初始化,直接使用該對象。這樣不會每次都創(chuàng)建LruCache
    查看全部
    0 采集 收起 來源:LruCache緩存(下)

    2018-03-22

  • 1. 對于從網(wǎng)絡上獲取圖片這種需求,我們都要使用Cache來將我們的圖片緩存起來,尤其是對于ListVIew這種,不能每次我們滑動ListView就重新從網(wǎng)上下載圖片,這樣會很浪費資源而且浪費手機的流量。在Android中,已經(jīng)為我們提供了一個用于緩存的類LruCache。我們可以使用這個類來實現(xiàn)我們對于圖片資源的緩存。 2. LruCache是將圖片緩存在內存中,而還有個第三方的類DiskLruCache來將圖片緩存到手機的Disk上,而我們大型的app,一般都是將LruCache和DiskLruCache結合起來使用,形成一個memory hierarchy。 LruCache<String,Object>近期最少使用算法:步驟:可以放到構造器中進行初始化,1,獲取運行時最大內存,2計算出內存1/4的大小初始化給緩存的大小new LruCache<>(內存的大小){ //每次存入到緩存的時候調用 sizeOf(String key,Object value){ return value.getBytesCount();//獲取存的數(shù)據(jù)大小 } }
    查看全部
    1 采集 收起 來源:LruCache緩存(上)

    2018-03-22

  • Android異步加載
    查看全部
    0 采集 收起 來源:LruCache緩存(上)

    2016-07-14

  • Bitmap-刷新ListView加載: 問題是解決:緩存的圖片對正確的圖片加載時的影響~ 問題描述:圖片在刷新顯示的時候會刷新更改多次,并不是一次到位加載正確圖片。 問題分析:ListView會重用convertView,每一個ImageView并沒有唯一的標識,多個LIstView中Item的加載在緩沖池中產(chǎn)生多個ImageView,在沒有Tag的情況下,重用convertView就會導致新的圖片在加載之前先顯示舊的圖片,根本原因是ListView中特定的Item沒有顯示正確的URL資源 解決方案:方法1-設置Tag:在首次加載時就為ImageView的標簽,標簽為正確的URL(身份驗證信息):viewHolder.imageView.setTag(url),在handler中加載圖片時對標簽進行判斷,若符合,則加載。 方法2-設置成員變量:在showImageByThread中仿照ImageView的方式對URL進行緩存,避免了網(wǎng)絡下載時間不確定導致的持續(xù)性的混亂 在異步加載中,當網(wǎng)絡環(huán)境不是很好情況下,ListView本身的緩沖機制可能會造成ListView的item顯示錯亂。 兩種方法可以避免這種問題: 1. 將當前的item與原始數(shù)據(jù)綁定 例如上一筆記中,在Adapter的getView()方法中為每個ImageView設置一個url的tag String urlString = newsBean.imageUrl; viewHolder.imageView.setTag(urlString); 在主線程的Handler中真正加載進行更新UI時,會判斷這個tag是否是對應的。只有當tag是正確時才會真正做設置item的操作 if(mImageView.getTag().equals(urlString)) mImageView.setImageBitmap((Bitmap) msg.obj); 2. 使用成員變量將對應的數(shù)據(jù)進行緩存,這種方式就相當于BaseAdapter中使用ViewHolder是一樣的。
    查看全部
    0 采集 收起 來源:使用Thread

    2016-07-14

  • inputStream in = new BufferedinputStream(conn.getInputStream()); inputStream是個抽象類,通過實例化子類獲取BufferedinputStream的對象。 抽象類 URLConnection 是所有表示應用程序與 URL 之間通信鏈路的類的超類。該類的實例可以用來對由 URL 引用的資源進行讀取和寫入操作,HttpURLConnection是支持 HTTP 特定功能的 URLConnection 實現(xiàn)異步加載(加載圖片)的兩種方式:多線程(Handler)和AsyncTask
    查看全部

舉報

0/150
提交
取消
課程須知
1、了解異步處理的一般方法 2、掌握如何使用多線程進行異步加載 3、掌握如何使用ASyncTask進行異步加載 4、異步加載的緩存與優(yōu)化
老師告訴你能學到什么?
本課程是Android中級課程 1、熟練掌握基本的Android應用程序開發(fā)方法

微信掃碼,參與3人拼團

微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網(wǎng)的支持!