@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接收的参数的类型
分享到:
相关推荐
此外,从Android 3.0(API级别11)开始,`AsyncTask`的执行策略有所改变,多个相同`AsyncTask`实例可能会并发执行,而非按顺序执行,因此在高版本Android中应特别注意这一点。 总的来说,`AsyncTask`是Android...
从Android 3.0(API Level 11)开始,`AsyncTask`默认是在一个单线程池中执行,这可能导致任务顺序执行而非并行。为了解决这个问题,开发者可以选择自定义线程池或者使用其他异步处理框架,如`Handler`、`Loader`、`...
这意味着如果你尝试并发执行多个AsyncTask,它们将按照队列顺序依次执行。 3. **版本兼容性**:自Android 3.0(API级别11)开始,AsyncTask默认在单独的线程池中执行,而在早期版本中,它们默认在主线程中执行。...
2. **版本兼容性**:从Android 3.0(API级别11)开始,`AsyncTask`的执行默认是在单线程模式下,即所有任务都会顺序执行。如果需要多线程执行,需在应用清单文件中声明`android:targetSdkVersion`为11或更高。 3. **...
AsyncTask 是 Android 开发中常用的一个轻量级异步任务处理框架,主要用于在后台线程执行耗时操作,然后在 UI 线程更新界面。它简化了多线程编程,使得开发者能够更加便捷地处理异步任务。本文将深入探讨 AsyncTask ...
- `AsyncTask`的执行顺序不是固定的,如果有多个任务同时执行,它们可能并发或者按顺序执行,具体取决于线程池的策略。 - `AsyncTask`不适合长时间运行的任务,因为它可能被系统回收,特别是在配置更改(如屏幕...
- AsyncTask的执行顺序不是线性的,多个任务可能会并发执行,因此不建议在同一个Activity中大量使用AsyncTask。 - 由于Android系统的内存管理机制,当Activity销毁后,与其关联的AsyncTask可能不会被立即取消,这...
- 大量并发的`AsyncTask`可能导致内存泄漏或性能问题,因为它们默认是按照队列顺序执行的。 - `AsyncTask`不是线程安全的,不应该在多个组件之间共享。 ### 5. AsyncTask替代方案 随着Android版本的更新,Google...
在Android开发中,异步处理是一项非常重要的技术,它能够帮助我们避免主线程因为执行耗时操作而引发的UI冻结问题。AsyncTask是Android提供的一种轻量级的异步处理框架,非常适合用来进行短时间、小规模的后台任务。...
AsyncTask是Android开发中用于处理轻量级异步任务的重要工具。它允许开发者在后台线程执行耗时操作,然后在UI线程更新结果,从而避免了主线程被阻塞导致应用无响应的问题。以下是对AsyncTask的详细解析: 1. **...
默认情况下,AsyncTask会按照它们被创建的顺序串行执行,以防止UI线程被大量并发任务阻塞。如果希望并行执行任务,可以使用`executeOnExecutor()`方法,传入`AsyncTask.THREAD_POOL_EXECUTOR`来启用线程池,这将允许...
Android的AsyncTask是Android开发中一个非常重要的工具类,它为开发者提供了在UI线程之外执行后台任务的能力,同时能够方便地更新UI。这个工具在处理轻量级异步任务时非常有效,例如网络请求、数据库操作或者计算...
- `AsyncTask`的执行顺序是按照`execute()`的调用顺序来的,如果有多个任务排队,它们会按顺序依次执行。 - `AsyncTask`的版本在API 11后有了较大的改动,不再允许在主线程中直接实例化,这主要是为了避免内存泄漏和...
AsyncTask的执行顺序也是一个复杂的问题。在早期版本中,它们是按照创建顺序串行执行的。从Android 1.6开始,它们变为并行执行,以提高性能。但在Android 3.0(Honeycomb)之后,为了应对并发问题,对于同一个`...
此外,还可以使用AsyncTask执行一个长时间的任务,如网络请求,在完成后更新Button的背景色。 通过这样的实战练习,开发者不仅能理解各个组件的工作原理,还能掌握它们在实际开发中的应用,从而提高解决问题的能力...
本篇文章将深入探讨JS代码的执行顺序,特别是涉及到`async`、`Promise`和`setTimeout`这三个关键概念。 首先,我们要了解JavaScript的执行机制。JavaScript引擎采用单线程执行模型,意味着同一时间只能执行一个任务...
关于AsyncTask的执行顺序,其行为在不同的Android版本中有变化。在1.6之前,它们是串行执行的,这意味着一个任务完成后,下一个任务才会开始。然而,从1.6到2.3,为了提高性能,AsyncTask改为并行执行。这意味着多个...
"deepJS-asyncTask.zip"这个压缩包文件显然是针对前端面试中JavaScript异步处理相关的问题集。在这个压缩包中,我们可能会看到一系列关于JavaScript异步编程、事件循环、回调函数、Promise、Async/Await等关键知识点...