@Override
protected ListAdapter initListViewAdapter() {
Log.e("--------------", "执行--0");
new AsynchTaskRequestData().execute();
Log.e("--------------", "执行--99");
mAdapter = new DailContactAdapter(this, cInfos, listTag);
Log.e("--------------", "执行--100");
return mAdapter;
}
private class AsynchTaskRequestData extends AsyncTask<Integer, Void, List<ContactInfo>> {
@Override
protected List<ContactInfo> doInBackground(Integer... params) {
Log.e("--------------", "执行--1");
try {
Log.e("--------------", "执行--2");
Thread.sleep(PtasApplication.THREAD_SLEEP_TIME);
} catch (InterruptedException e) {
Log.e(DailContact.this.getClass().getName(), "InterruptedException", e);
}
Log.e("--------------", "执行--3");
return ContactHolder.getContactInfosSort(DailContact.this, getWhere(), getOrder(), listTag);
}
@Override
protected void onPreExecute() {
Log.e("--------------", "执行--4");
commonList.addFooterView(loadingView);
}
@Override
protected void onPostExecute(List<ContactInfo> currentCInfos) {
Log.e("--------------", "执行--5");
if (cInfos.size() == 0) {
displayText.setVisibility(View.VISIBLE);
}
if (currentCInfos.size() == 0) {
if (cInfos.size() == 0) {
displayText.setVisibility(View.VISIBLE);
}
commonList.removeFooterView(loadingView);
return;
}
displayText.setVisibility(View.GONE);
Log.e("--------------", "执行--6");
cInfos.addAll(currentCInfos);
mAdapter.notifyDataSetChanged();
mAdapter.initSections(currentCInfos);
sections = mAdapter.getSections();
commonList.removeFooterView(loadingView);
Log.e("--------------", "执行--7");
}
}
日志记录如下:
12-08 01:00:16.854: E/--------------(571): 执行--0
12-08 01:00:16.873: E/--------------(571): 执行--4
12-08 01:00:16.894: E/--------------(571): 执行--99
12-08 01:00:16.894: E/--------------(571): 执行--100
12-08 01:00:16.923: E/--------------(571): 执行--1
12-08 01:00:16.923: E/--------------(571): 执行--2
12-08 01:00:18.724: I/MapActivity(571): Handling network change notification:CONNECTED
12-08 01:00:18.724: E/MapActivity(571): Couldn't get connection factory client
12-08 01:00:18.924: E/--------------(571): 执行--3
12-08 01:00:27.484: D/dalvikvm(571): GC_FOR_MALLOC freed 9497 objects / 335464 bytes in 85ms
12-08 01:00:34.383: D/dalvikvm(571): GC_FOR_MALLOC freed 12655 objects / 473528 bytes in 75ms
12-08 01:00:38.203: D/dalvikvm(571): GREF has increased to 201
12-08 01:00:40.334: E/--------------(571): 执行--5
12-08 01:00:40.334: E/--------------(571): 执行--6
12-08 01:00:40.684: E/--------------(571): 执行--7
12-08 01:00:42.954: D/dalvikvm(571): GC_FOR_MALLOC freed 12275 objects / 499120 bytes in 71ms
结论:如果要在Adapter中处理一些数据,并且将其放在了new Adapter()的构造方法中,这是很危险的,因为在数据还没有处理完成的时候,Adapter 已经被new出来了,在对其进行的后续操作都是都是null。
结论:执行顺序 onPreExecute-->doInBackground-->onPostExecute
AsyncTask<Integer, Void, List<ContactInfo>>
第一个是指 doInBackground中接收的参数的类型
第二个是指onProgressUpdate中接收的参数的类型
第三个是每日doInBackground返回值的类型以及onPostExecute接收的参数的类型
分享到:
相关推荐
AsyncTask的用法
这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。 onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread...
最新AsyncTask源码
AsyncTask_简单演示AsyncTask异步操作,写一个简单的AsyncTask异步操作解决上一篇文章提到的线程阻塞问题,对应我的博客《网易博客迁移:Android专题之AsyncTask(二)简单演示AsyncTask异步操作》,有问题欢迎留言...
自己写了一个基于httpurlconnection和Asynctask的例子
Android AsyncTask异步处理下载网页
很简单的AsyncTask小例子,
AsyncTask 断点下载
android 任务后台处理事物 asyncTask封装
Android Handler AsyncTask 异步加载
Android AsyncTask实例,测试ok。
AsyncTask.java,AsyncTask.java,AsyncTask.java,AsyncTask.java
Android AsyncTask的简单Demo,对应Blog文章:http://blog.csdn.net/dolacmeng/article/details/50215519
AsyncTask_演示线程阻塞,对应我的博客《Android专题之AsyncTask(一)基本概念介绍》,有问题欢迎留言讨论。
Handler与AsyncTask使用示例,Handler AsyncTask 示例 looper
一个AsyncTask的Demo,简单的描述了AsyncTask的操作
详解AsyncTask的cancel的有效用法,强制停止AsyncTask异步任务.
Android AsyncTask用法和异步加载图片通过AsyncTask 从网络上异步加载一张图片
利用android.os.AsyncTask类完成MP3下载,采用进度条动态显示下载的百分比。是学习AsyncTask不错的例子。