GridView使用AsyncTask模拟异步加载大量图片
2016-05-26 15:54
447 查看
使用AsyncTask<Void,Void,Void>实现加载大量图片时new GetGridDataTask().execute(null)报错:The method execute(Void[]) is ambiguous for the type MainActivity.GetGridDataTask我sdk版本是4.4 但是我把sdk换成2.3.3版本是ok的,所以google在3.0以后对AsyncTask做了修改,解决也非常简单,直接在execute()方法中什么都不写就ok了
改成:new GetGridDataTask().execute();//执行获取数据的任务 就可以了
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">使用GridView模拟异步加载大量图片:</span>
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">AsyncTask可能存在新开大量线程消耗系统资源和导致应用FC的风险</span></span>
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">package com.app.fantasticbaby;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import android.os.AsyncTask;import android.os.Bundle;import android.app.Activity;import android.app.Dialog;import android.app.ProgressDialog;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends Activity { private GridView asyn_gridview; private List<HashMap<String,Object>> mDatas; private CustomAdapter adapter; private static final int DIALOG_PROGRESS = 0; private ProgressDialog mProgressDialog;<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>protected void onCreate(Bundle savedInstanceState) {<span style="white-space:pre"> </span>super.onCreate(savedInstanceState);<span style="white-space:pre"> </span>setContentView(R.layout.activity_main);<span style="white-space:pre"> </span>asyn_gridview = (GridView)findViewById(R.id.asyn_gridview);<span style="white-space:pre"> </span>mDatas = new ArrayList<HashMap<String,Object>>();<span style="white-space:pre"> </span>adapter = new CustomAdapter();<span style="white-space:pre"> </span>asyn_gridview.setAdapter(adapter);<span style="white-space:pre"> </span><span style="white-space:pre"> </span>}<span style="white-space:pre"> </span> @Override <span style="white-space:pre"> </span>protected void onStart () { <span style="white-space:pre"> </span>Log.i("onstart", "onstart"); super.onStart(); new GetGridDataTask().execute();//执行获取数据的任务 } <span style="white-space:pre"> </span><span style="white-space:pre"> </span> @Override <span style="white-space:pre"> </span> protected Dialog onCreateDialog(int id) { <span style="white-space:pre"> </span> switch (id) { <span style="white-space:pre"> </span> case DIALOG_PROGRESS: <span style="white-space:pre"> </span> mProgressDialog = new ProgressDialog(MainActivity.this); <span style="white-space:pre"> </span> mProgressDialog.setMessage("正在获取数据"); <span style="white-space:pre"> </span> mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> return mProgressDialog; <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span> return null; <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public boolean onCreateOptionsMenu(Menu menu) {<span style="white-space:pre"> </span>// Inflate the menu; this adds items to the action bar if it is present.<span style="white-space:pre"> </span>getMenuInflater().inflate(R.menu.main, menu);<span style="white-space:pre"> </span>return true;<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>class CustomAdapter extends BaseAdapter{<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public int getCount() {<span style="white-space:pre"> </span>// TODO Auto-generated method stub<span style="white-space:pre"> </span>return mDatas.size();<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public Object getItem(int arg0) {<span style="white-space:pre"> </span>// TODO Auto-generated method stub<span style="white-space:pre"> </span>return mDatas.get(arg0);<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public long getItemId(int arg0) {<span style="white-space:pre"> </span>// TODO Auto-generated method stub<span style="white-space:pre"> </span>return arg0;<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public View getView(int position, View convertView, ViewGroup parent) {<span style="white-space:pre"> </span>// TODO Auto-generated method stub<span style="white-space:pre"> </span>ViewHolder holder = null;<span style="white-space:pre"> </span>if(convertView == null){<span style="white-space:pre"> </span>convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.grid_item, null);<span style="white-space:pre"> </span>holder = new ViewHolder();<span style="white-space:pre"> </span>holder.item_image = (ImageView)convertView.findViewById(R.id.item_image);<span style="white-space:pre"> </span>holder.item_text = (TextView)convertView.findViewById(R.id.item_text);<span style="white-space:pre"> </span>convertView.setTag(holder);<span style="white-space:pre"> </span>}else{<span style="white-space:pre"> </span>holder = (ViewHolder) convertView.getTag();<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>holder.item_text.setText((String)(mDatas.get(position).get("title")));<span style="white-space:pre"> </span> Integer id = (Integer) mDatas.get(position).get("pic");<span style="white-space:pre"> </span> if(id != null) { <span style="white-space:pre"> </span> holder.item_image.setImageResource(id); <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span> else { <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>holder.item_image.setImageBitmap(null); <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span> AsyncTask task = (AsyncTask) mDatas.get(position).get("task"); <span style="white-space:pre"> </span> if(task == null || task.isCancelled()) { <span style="white-space:pre"> </span> Log.d("Test", "" + position); <span style="white-space:pre"> </span> mDatas.get(position).put("task", new GetItemImageTask(position).execute());//执行获取图片的任务 <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span>return convertView;<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span><span style="white-space:pre"> </span>class ViewHolder{<span style="white-space:pre"> </span>ImageView item_image;<span style="white-space:pre"> </span>TextView item_text;<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span><span style="white-space:pre"> </span>class GetGridDataTask extends AsyncTask<Void,Void,Void>{<span style="white-space:pre"> </span>protected void onPreExecute () { mDatas.clear(); adapter.notifyDataSetChanged(); showDialog(DIALOG_PROGRESS);//打开等待对话框 } <span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>protected Void doInBackground(Void... params) {<span style="white-space:pre"> </span>// TODO Auto-generated method stub<span style="white-space:pre"> </span>try {<span style="white-space:pre"> </span>Thread.sleep(500);//模拟耗时的网络操作<span style="white-space:pre"> </span>} catch (InterruptedException e) {<span style="white-space:pre"> </span>// TODO Auto-generated catch block<span style="white-space:pre"> </span>e.printStackTrace();<span style="white-space:pre"> </span>} <span style="white-space:pre"> </span> for(int i = 0; i < 200; i++) { <span style="white-space:pre"> </span> HashMap<String, Object> hm = new HashMap<String, Object>(); <span style="white-space:pre"> </span> hm.put("title", "Title"); <span style="white-space:pre"> </span> mDatas.add(hm); <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span>return null;<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span><span style="white-space:pre"> </span>protected void onPostExecute (Void result) { adapter.notifyDataSetChanged();//通知ui界面更新 dismissDialog(DIALOG_PROGRESS);//关闭等待对话框 } <span style="white-space:pre"> </span><span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>class GetItemImageTask extends AsyncTask<Void,Void,Void>{ <span style="white-space:pre"> </span>int pos; GetItemImageTask(int pos) { this.pos = pos; } <span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>protected Void doInBackground(Void... arg0) {<span style="white-space:pre"> </span>// TODO Auto-generated method stub<span style="white-space:pre"> </span>try {<span style="white-space:pre"> </span>Thread.sleep(2000);//模拟耗时的网络操作<span style="white-space:pre"> </span>} catch (InterruptedException e) {<span style="white-space:pre"> </span>// TODO Auto-generated catch block<span style="white-space:pre"> </span>e.printStackTrace();<span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>mDatas.get(pos).put("pic", R.drawable.back1); <span style="white-space:pre"> </span>return null;<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>protected void onPostExecute(Void result) {<span style="white-space:pre"> </span>// TODO Auto-generated method stub<span style="white-space:pre"> </span> adapter.notifyDataSetChanged();//通知ui界面更新 <span style="white-space:pre"> </span>}<span style="white-space:pre"> </span><span style="white-space:pre"> </span><span style="white-space:pre"> </span><span style="white-space:pre"> </span>}}</span>
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"></span>
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"></span>
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"></span>
相关文章推荐
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法 (转的下次就知道了)
- 5.26 考试修改+总结
- 安卓开发中常见的问题总结
- java后台通过url获取json数据
- Vue.js-----轻量高效的MVVM框架(十一、使用slot分发内容)
- 屏幕旋转快捷键设置
- C# 父类的属性赋值给子类的方法
- Material Design
- iOS 拨打电话三种方式
- CKeditor 配置信息
- mybatis sql in 查询
- Spring,ehcache整合报错
- Spring,ehcache整合报错
- 【学习】苹果iPhone safari浏览器样式重置修复按钮圆角bug
- 关于event loop的解释
- 公有密钥/私有密钥加密
- iOS学习之——自定义动画切换的相关的主要API
- CodeForces667APouring Rain
- 漫画别只是看,用“应用之星”自制App才过瘾
- Rejection sampling 笔记