亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Android必學-異步加載

難度中級
時長 1小時57分
學習人數
綜合評分9.70
220人評價 查看評價
9.9 內容實用
9.7 簡潔易懂
9.5 邏輯清晰
  • 參數1: Params 用于傳遞參數數組params[],可以傳遞多個參數,在方法的內部獲取參數時,通過 int a=params[0];的方式來獲取傳入的參數數據,參數數組下標從0開始,依次存儲了錄入的參數 參數2: Progress 記錄AsyncTask<>的進度 參數3: Result 作為AsyncTask<>的返回值,可根據需要定制
    查看全部
    0 采集 收起 來源:AsyncTask分析

    2018-03-22

  • Bean 組件
    查看全部
    0 采集 收起 來源:AsyncTask分析

    2015-07-31

  • maxLine 設定文字行數
    查看全部
    0 采集 收起 來源:創建布局

    2015-07-31

  • 值得先學習
    查看全部
  • 加載圖片。。異步兩種方式
    查看全部
  • http://www.xianlaiwan.cn/api/teacher?type=4&num=30
    查看全部
    2 采集 收起 來源:AsyncTask分析

    2018-03-22

  • 異步加載——圖片加載優化 (接上一筆記) 4. 讓NewsAdapter實現OnScrollListener,重寫其監聽事件方法 public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub if(scrollState == SCROLL_STATE_IDLE){ mImageLoader.loadImages(mStart, mEnd); //滑動停止,加載從start到end的圖片 }else{ mImageLoader.cancelAllTasks(); //正在滑動,取消所有的加載任務 } } 5. mImageLoader這個對象的獲取也需要改 public NewsAdapter(Context context, List<NewsBean> mListData, ListView listView) { …… mImageLoader = new ImageLoader(listView); …… listView.setOnScrollListener(this);//為listView設置監聽事件 } 6. 首次啟動預加載 onScrollStateChanged()這個方法在初始狀態是不會被調用的,在onScroll()方法中做一個處理。 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { …… //第一次顯示時將被調用 if(mFirstIn && visibleItemCount > 0){ mImageLoader.loadImages(mStart, mEnd); mFirstIn = false; } } 小結(如圖) 使用loadImages()目的是將加載圖片的操作權交給監聽事件。
    查看全部
    0 采集 收起 來源:總結

    2018-03-22

  • 異步加載——圖片加載優化 1. 創建一個靜態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. 創建一個方法,加載從start到end的所有圖片 public void loadImages(int start, int end){ for (int i = start; i < end; i++){ //因為URLStrings是靜態的,所以可以直接使用 String url = NewsAdapter.URLStrings[i]; //從緩存中獲取對應的圖片并判斷 Bitmap bitmap = getBitmapFromCache(url); if(bitmap == null){ NewsAsyncTask task = new NewsAsyncTask(url); task.execute(url); mTasks.add(task); }else { //從緩存中直接獲取數據讓iamgeView顯示,這里imageView是從url的tag得來的 ImageView imageView = (ImageView) mListView.findViewWithTag(url); imageView.setImageBitmap(bitmap); }}} 3. 改寫showImageByAsyncTask(),讓顯示圖片的操作交給scroll的監聽事件 (如圖) 當bitmap不在緩存時,也不去加載圖片
    查看全部
    6 采集 收起 來源:圖片加載優化

    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 { //從緩存中直接獲取數據讓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)最后要在創建Adapter對象時給ImageLoader的對象初始化,直接使用該對象。這樣不會每次都創建LruCache。 public NewsAdapter(Context context, List<NewsBean> mListData) { super(); this.mList = mListData; mInflater = LayoutInflater.from(context); mImageLoader = new ImageLoader(); } //通過AsyncTask執行顯示ImageView額操作 mImageLoader.showImageByAsyncTask(viewHolder.imageView, urlString);
    查看全部
    0 采集 收起 來源:LruCache緩存(下)

    2018-03-22

  • 受益匪淺。。棒棒噠
    查看全部
    0 采集 收起 來源:總結

    2015-07-21

  • 異步加載——LruCache緩存 1. Lrc——Least Recently Used,LruCache類來實現緩存算法。 LruCache類將內容保存在內存中,并以一定的方法管理這些內容,來實現緩存管理。 2. LrcCache本質是一個Map,底層是通過HashMap實現的。 所以在使用LruCache時可以通過調用set()和get()方法使用。 3. 使用步驟: (1)先創建一個LruCache,并在構造函數中初始化它。 注意:通過匿名內部類的方式實現sizeOf()方法,sizeOf()方法用來獲取每次緩存的對象的大小,默認返回元素的個數。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()方法,分別是加入元素到緩存以及從緩存中獲取數據 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)最后要在創建Adapter對象時給ImageLoader的對象初始化,直接使用該對象。這樣不會每次都創建LruCache。
    查看全部
    0 采集 收起 來源:LruCache緩存(下)

    2018-03-22

  • 根據URL直接獲取連網獲取數據,簡單粗暴
    查看全部
    0 采集 收起 來源:獲取Json數據

    2015-07-17

  • 異步加載——小結 在異步加載中,當網絡環境不是很好情況下,ListView本身的緩沖機制可能會造成ListView的item顯示錯亂。 兩種方法可以避免這種問題: 1. 將當前的item與原始數據綁定 例如上一筆記中,在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. 使用成員變量將對應的數據進行緩存,這種方式就相當于BaseAdapter中使用ViewHolder是一樣的。
    查看全部
    0 采集 收起 來源:使用Thread

    2015-07-16

  • url = http://www.xianlaiwan.cn/api/teacher?type=4&num=30
    查看全部
  • 異步加載——Thread方式 1. 將url轉換成Bitmap 通過InputStream,調用BitmapFactory.decodeStream()方法將url String轉換成一個bitmap并返回。 public Bitmap getBitmapFromURL(String urlString) { Bitmap bitmap; InputStream is = null; try { URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); is = new BufferedInputStream(connection.getInputStream()); //從urlString中獲取InputStream bitmap = BitmapFactory.decodeStream(is); //通過decodeStream獲取bitmap return bitmap; } 2. 從getBitmapFromURL()獲得的bitmap對象是不能直接設置給ImageView的 按照android單線程模型,非主線程是不能在此線程中直接更新UI的,可以通過一個Handler來傳遞帶有bitmap的消息給主線程,讓主線程的handler更新UI。 如圖: (1)開辟一個線程,在線程中將url轉換成bitmap (2)通過sendMessage()以消息的形式將bitmap發送給主線程的Handler (3)在Handler中設置bitmap給ImageView 3. 為了保證ListView每行數據中的ImageView能夠正確顯示,在Adapter的getView()方法中為每個ImageView設置一個tag String urlString = newsBean.imageUrl; viewHolder.imageView.setTag(urlString); 主線程的Handler中更新UI時,會判斷這個tag,是否是對應的。 if(mImageView.getTag().equals(urlString)) mImageView.setImageBitmap((Bitmap) msg.obj);
    查看全部
    0 采集 收起 來源:使用Thread

    2015-07-16

舉報

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

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

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