//这是一个自定义的试图
public class TaskItem extends LinearLayout{
private ProgressBar progressBar;
private TextView textView;
public TaskItem(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TaskItem(Context context) {
super(context);
}
public void setTitle(String title){
if (textView==null) {
textView=(TextView)findViewById(R.id.task_name);
}
textView.setText(title);
}
public void setProgress(int progress){
if (progressBar==null) {
progressBar=(ProgressBar)findViewById(R.id.task_progress);
}
progressBar.setProgress(progress);
}
}
//这是一个异步类,你懂的
public class AsycTaskItem extends AsyncTask<Void, Integer, Void>{
private TaskItem taskItem=null;
private String name=null;
public AsycTaskItem(TaskItem taskItem) {
this.taskItem = taskItem;
}
@Override
protected void onPreExecute() {
taskItem.setTitle("Task#");
}
@Override
protected Void doInBackground(Void... params) {
int num = 0;
while (num<100) {
SystemClock.sleep(100);
publishProgress(num);
num++;
}
return null;
}
@Override
protected void onPostExecute(Void result) {
}
@Override
protected void onProgressUpdate(Integer... values) {
taskItem.setProgress(values[0]);
}
}
//主要
public class Main extends Activity {
private static int ID = 0;
private static final int TASK_COUNT = 9;
private static ExecutorService SINGLE_TASK_EXECUTOR;
private static ExecutorService LIMITED_TASK_EXECUTOR;
private static ExecutorService FULL_TASK_EXECUTOR;
//线程池的类别创建,下面需用
static {
SINGLE_TASK_EXECUTOR = (ExecutorService) Executors.newSingleThreadExecutor();
LIMITED_TASK_EXECUTOR = (ExecutorService) Executors.newFixedThreadPool(7);
FULL_TASK_EXECUTOR = (ExecutorService) Executors.newCachedThreadPool();
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ListView taskList = (ListView) findViewById(R.id.task_list);
taskList.setAdapter(new AsycTaskAdapter(getApplication(), TASK_COUNT));
}
public class AsycTaskAdapter extends BaseAdapter{
private Context mContext;
private LayoutInflater mFactory;
private int mTaskCount;
List<AsycTaskItem> mTaskList;
public AsycTaskAdapter(Context context, int taskCount) {
mContext = context;
mFactory = LayoutInflater.from(mContext);
mTaskCount = taskCount;
mTaskList = new ArrayList<AsycTaskItem>(taskCount);
}
@Override
public int getCount() {
return mTaskCount;
}
@Override
public Object getItem(int position) {
return mTaskList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mFactory.inflate(R.layout.item, null);
AsycTaskItem task = new AsycTaskItem((TaskItem) convertView);
task.executeOnExecutor( LIMITED_TASK_EXECUTOR); //结合线程池使用
mTaskList.add(task);
}
return convertView;
}
}
}
AsynkTask结合线程池的使用
最新推荐文章于 2018-04-13 12:34:49 发布