異步加載怎么開啟多線程?
我發現一個問題,使用異步加載圖片是單線程,不能同時加載多張圖片,而且必須要等前一個圖片加載完后才能開始加載后面一張,影響速度;而用多線程的話,多張圖片基本上都是同時加載出來的,速度效率快很多。那么問題來了,在異步加載中怎么使用多線程?
我發現一個問題,使用異步加載圖片是單線程,不能同時加載多張圖片,而且必須要等前一個圖片加載完后才能開始加載后面一張,影響速度;而用多線程的話,多張圖片基本上都是同時加載出來的,速度效率快很多。那么問題來了,在異步加載中怎么使用多線程?
2016-06-21
舉報
2016-07-02
一直是多線程,在加載??!
for (int i = start; i < end; i++){??? 《====這里是for循環重復開啟多個task
? ?String url = NewsAdapter.URLS[i];
? ?//由緩存中得到bitmap
? ?Bitmap bitmap = getBitmapFormCache(url);
? ?if (bitmap == null){
? ? ? ?//當bitmap為空時,由AsyncTask進行加載,并在onPostExecute()方法中setImageBitmap
? ? ? ?NewsAsyncTask task = new NewsAsyncTask(url);
? ? ? ?task.execute(url);
? ? ? ?mAsyncTask.add(task);
? ?} else {
? ? ? ?//當bitmap不為空時,直接進行setImageBitmap
? ? ? ?ImageView imageView = (ImageView) mListView.findViewWithTag(url);
? ? ? ?imageView.setImageBitmap(bitmap);
? ?}
}
2016-06-25
public void showImageByThread(final ImageView imageView, final String url) {
?
????mHandler = new Handler() {
????????@Override
????????public void handleMessage(Message msg) {
????????????ImgHolder holder = (ImgHolder) msg.obj;
????????????if (holder.imageView.getTag().equals(holder.url)) {
????????????????holder.imageView.setImageBitmap(holder.bitmap);
????????????}
????????}
????};
????new Thread() {
????????@Override
????????public void run() {
????????????Bitmap bitmap = getBitmapFromUrl(url);
????????????Message message = Message.obtain();
????????????message.obj = new ImgHolder(imageView, bitmap, url);
????????????mHandler.sendMessage(message);
????????}
????}.start();
}