- 浏览: 441801 次
- 性别:
- 来自: 北京
最新评论
-
咖啡动力:
mWebView载入的当然是网址了
Android使用webview,触发网页中链接的事件 以及webview加载本地html、本apk内html和远程URL -
咖啡动力:
还有我是女士哦
Android延迟执行 handler类的实现 -
咖啡动力:
是吗,还有这事,谢谢哦
Android延迟执行 handler类的实现 -
cfm1989:
兄弟,是这样的!!!!让我纠结了半个小时,要细心点mHandl ...
Android延迟执行 handler类的实现 -
白色蜻蜓:
遇到个iPhone开发者不易
从UIView转换UIImage(截屏是一样的)
本文章主要讲解下AsyncTask的使用。
首先,我们得明确下一个概念,什么是UI线程。顾名思义,ui线程就是管理着用户界面的那个线程!
android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以。这种模式叫做单线程模式。我们在单线程模式下编程一定要注意:不要阻塞ui线程、确保只在ui线程中访问ui组件。
当我们要执行一个复杂耗时的算法并且最终要将计算结果反映到ui上时,我们会发现,我们根本没办法同时保证上面的两点要求;我们肯定会想到开启一个新的线程,让这个复杂耗时的任务到后台去执行,但是执行完毕了呢?我们发现,我们无法再与ui进行交互了。
为了解决这种情况,android为我们提供了很多办法。
1)、handler和message机制:通过显示的抛出、捕获信息与ui进行交互;
2)、Activity.runOnUiThread(Runnable):如果当前线程为ui线程,则立即执行;否则,将参数中的线程操作放入到ui线程的事件队列中,等待执行。
3)、View.post(Runnable):将操作放入到message队列中,如果放入成功,该操作将会在ui线程中执行,并返回true,否则返回false
4)、View.postDelayed(Runnable,long)跟第三条基本一样,只不过添加了一个延迟时间。
5)、android1.5以后为我们提供了一个工具类来搞定这个问题AsyncTask.
AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result。
Params 启动任务执行的输入参数,比如HTTP请求的URL
。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String
。
用程序调用,开发者需要做的就是实现这些方法。
1) 子类化AsyncTask
2) 实现AsyncTask中定义的下面一个或几个方法
onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。
doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.
为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
1) Task的实例必须在UI thread中创建
2) execute方法必须在UI thread中调用
3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法
4) 该task只能被执行一次,否则多次调用时将会出现异常
view plaincopy to clipboardprint?
01.package cn.com.chenzheng_java;
02.
03.import android.os.AsyncTask;
04./**
05. *
06. * @author chenzheng_java
07. * @description 异步任务AcyncTask示例
08. *
09. */
10.public class MyAsyncTask extends AsyncTask<String, Integer, Object> {
11.
12. /**
13. * 该方法由ui线程进行调用,用户可以在这里尽情的访问ui组件。
14. * 很多时候,我们会在这里显示一个进度条啥的,以示后台正在
15. * 执行某项功能。
16. */
17. @Override
18. protected void onPreExecute() {
19. super.onPreExecute();
20. }
21.
22. /**
23. * 该方法由后台进程进行调用,进行主要的耗时的那些计算。
24. * 该方法在onPreExecute方法之后进行调用。当然在执行过程中
25. * 我们可以每隔多少秒就调用一次publishProgress方法,更新
26. * 进度信息
27. */
28. @Override
29. protected Object doInBackground(String... params) {
30. return null;
31. }
32.
33.
34. /**
35. * doInBackground中调用了publishProgress之后,ui线程就会
36. * 调用该方法。你可以在这里动态的改变进度条的进度,让用户知道
37. * 当前的进度。
38. */
39. @Override
40. protected void onProgressUpdate(Integer... values) {
41. super.onProgressUpdate(values);
42. }
43.
44. /**
45. * 当doInBackground执行完毕之后,由ui线程调用。可以在这里
46. * 返回我们计算的最终结果给用户。
47. */
48. @Override
49. protected void onPostExecute(Object result) {
50. super.onPostExecute(result);
51. }
52.
53.
54.
55.
56.}
package cn.com.chenzheng_java;
import android.os.AsyncTask;
/**
*
* @author chenzheng_java
* @description 异步任务AcyncTask示例
*
*/
public class MyAsyncTask extends AsyncTask<String, Integer, Object> {
/**
* 该方法由ui线程进行调用,用户可以在这里尽情的访问ui组件。
* 很多时候,我们会在这里显示一个进度条啥的,以示后台正在
* 执行某项功能。
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
}
/**
* 该方法由后台进程进行调用,进行主要的耗时的那些计算。
* 该方法在onPreExecute方法之后进行调用。当然在执行过程中
* 我们可以每隔多少秒就调用一次publishProgress方法,更新
* 进度信息
*/
@Override
protected Object doInBackground(String... params) {
return null;
}
/**
* doInBackground中调用了publishProgress之后,ui线程就会
* 调用该方法。你可以在这里动态的改变进度条的进度,让用户知道
* 当前的进度。
*/
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
/**
* 当doInBackground执行完毕之后,由ui线程调用。可以在这里
* 返回我们计算的最终结果给用户。
*/
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
}
}
------------------------------------------------------------------------------------------
AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应
首先,我们得明确下一个概念,什么是UI线程。顾名思义,ui线程就是管理着用户界面的那个线程!
android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以。这种模式叫做单线程模式。我们在单线程模式下编程一定要注意:不要阻塞ui线程、确保只在ui线程中访问ui组件。
当我们要执行一个复杂耗时的算法并且最终要将计算结果反映到ui上时,我们会发现,我们根本没办法同时保证上面的两点要求;我们肯定会想到开启一个新的线程,让这个复杂耗时的任务到后台去执行,但是执行完毕了呢?我们发现,我们无法再与ui进行交互了。
为了解决这种情况,android为我们提供了很多办法。
1)、handler和message机制:通过显示的抛出、捕获信息与ui进行交互;
2)、Activity.runOnUiThread(Runnable):如果当前线程为ui线程,则立即执行;否则,将参数中的线程操作放入到ui线程的事件队列中,等待执行。
3)、View.post(Runnable):将操作放入到message队列中,如果放入成功,该操作将会在ui线程中执行,并返回true,否则返回false
4)、View.postDelayed(Runnable,long)跟第三条基本一样,只不过添加了一个延迟时间。
5)、android1.5以后为我们提供了一个工具类来搞定这个问题AsyncTask.
AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result。
Params 启动任务执行的输入参数,比如HTTP请求的URL
。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String
。
用程序调用,开发者需要做的就是实现这些方法。
1) 子类化AsyncTask
2) 实现AsyncTask中定义的下面一个或几个方法
onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。
doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.
为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
1) Task的实例必须在UI thread中创建
2) execute方法必须在UI thread中调用
3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法
4) 该task只能被执行一次,否则多次调用时将会出现异常
view plaincopy to clipboardprint?
01.package cn.com.chenzheng_java;
02.
03.import android.os.AsyncTask;
04./**
05. *
06. * @author chenzheng_java
07. * @description 异步任务AcyncTask示例
08. *
09. */
10.public class MyAsyncTask extends AsyncTask<String, Integer, Object> {
11.
12. /**
13. * 该方法由ui线程进行调用,用户可以在这里尽情的访问ui组件。
14. * 很多时候,我们会在这里显示一个进度条啥的,以示后台正在
15. * 执行某项功能。
16. */
17. @Override
18. protected void onPreExecute() {
19. super.onPreExecute();
20. }
21.
22. /**
23. * 该方法由后台进程进行调用,进行主要的耗时的那些计算。
24. * 该方法在onPreExecute方法之后进行调用。当然在执行过程中
25. * 我们可以每隔多少秒就调用一次publishProgress方法,更新
26. * 进度信息
27. */
28. @Override
29. protected Object doInBackground(String... params) {
30. return null;
31. }
32.
33.
34. /**
35. * doInBackground中调用了publishProgress之后,ui线程就会
36. * 调用该方法。你可以在这里动态的改变进度条的进度,让用户知道
37. * 当前的进度。
38. */
39. @Override
40. protected void onProgressUpdate(Integer... values) {
41. super.onProgressUpdate(values);
42. }
43.
44. /**
45. * 当doInBackground执行完毕之后,由ui线程调用。可以在这里
46. * 返回我们计算的最终结果给用户。
47. */
48. @Override
49. protected void onPostExecute(Object result) {
50. super.onPostExecute(result);
51. }
52.
53.
54.
55.
56.}
package cn.com.chenzheng_java;
import android.os.AsyncTask;
/**
*
* @author chenzheng_java
* @description 异步任务AcyncTask示例
*
*/
public class MyAsyncTask extends AsyncTask<String, Integer, Object> {
/**
* 该方法由ui线程进行调用,用户可以在这里尽情的访问ui组件。
* 很多时候,我们会在这里显示一个进度条啥的,以示后台正在
* 执行某项功能。
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
}
/**
* 该方法由后台进程进行调用,进行主要的耗时的那些计算。
* 该方法在onPreExecute方法之后进行调用。当然在执行过程中
* 我们可以每隔多少秒就调用一次publishProgress方法,更新
* 进度信息
*/
@Override
protected Object doInBackground(String... params) {
return null;
}
/**
* doInBackground中调用了publishProgress之后,ui线程就会
* 调用该方法。你可以在这里动态的改变进度条的进度,让用户知道
* 当前的进度。
*/
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
/**
* 当doInBackground执行完毕之后,由ui线程调用。可以在这里
* 返回我们计算的最终结果给用户。
*/
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
}
}
------------------------------------------------------------------------------------------
AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应
发表评论
-
Android软键盘弹出不影响布局的方法
2013-02-18 13:55 6327The AndroidManifest.xml File &l ... -
android刷新界面某个view
2013-02-17 17:32 1711private SlipButton button = (Sl ... -
Activity转换为View
2011-08-09 14:53 2601FrameLayout container = (FrameL ... -
android加载drawable中的图片
2011-08-05 14:58 2045android加载图片有两种方式 一种是int,一种是Draw ... -
自定义Android,toast,以及多线程toast
2011-07-13 16:38 4349Toast用于向用户显示一些帮助/提示。定义一个属于你自己的T ... -
Can't create handler inside thread that has not called Looper.prepare()
2011-07-01 11:58 845807-01 02:01:12.431: WARN/System ... -
Android中的Handler, Looper, MessageQueue和Thread
2011-07-01 11:41 1073前几天,和同事探讨了一下Android中的消息机制,探究了消息 ... -
android ActivityGroup管理activity,activity转换成view
2011-06-29 16:45 5485Intent intent = new Intent(t ... -
android返回键的工作原理
2011-06-29 16:42 1725// back键默认执行方法 // BaseView.t ... -
android中SimpleAdepter的使用
2011-06-23 17:23 1044//存放需要适配的数据 private List<Ma ... -
Android中常常使用shape来定义控件
2011-06-23 14:22 1201Android中常常使用shape来定义控件的一些显示属性,今 ... -
apk打包基础知识
2011-06-23 12:15 1674原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 ... -
android中xml文件注意事项
2011-06-16 11:09 980xml文件 android:id <TabWidget ... -
android中的tab。TabHost ,TabWidget
2011-06-14 18:01 3785步骤 1.建立两个Activity,作为tab内容 (我这里 ... -
android从xml创建控件(按钮)或直接创建控件
2011-06-14 15:26 3274android从xml创建控件 根据xml创建view (r ... -
WARNING: Application does not specify an API level requirement!
2011-06-14 10:51 11564修改AndroidManifest.xml,添加sdkVers ... -
bytes保存成图片存入sdcard卡中
2011-04-06 15:35 1513bytes pbWk; //Android获取sdcard卡 ... -
android加载文件的方式,路径的写法
2011-04-06 15:23 2132//wView.loadUrl("file:///a ... -
Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
2011-04-02 11:11 22522.2之前的所有模拟器都会遇到的问题,机器内存的瓶颈,当apk ... -
一个apk调用另外一个apk的activity
2011-03-30 11:54 1240系统提供了很多可以直接调用的Activity,通过指定的I ...
相关推荐
AsyncTask 是 Android 开发中常用的一个轻量级异步任务处理框架,主要用于在后台线程执行耗时操作,然后在 UI 线程更新界面。它简化了多线程编程,使得开发者能够更加便捷地处理异步任务。本文将深入探讨 AsyncTask ...
本资料包主要讲解了如何使用`AsyncTask`进行异步加载图片,这对于在UI线程中保持流畅用户体验至关重要。 `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间...
本实例将详细讲解如何使用AsyncTask,并结合ProgressBar进行实时进度显示,以提高用户体验。 首先,AsyncTask有三个泛型参数:Params, Progress, Result。Params表示异步任务执行前需要的输入参数类型,Progress是...
下面将详细讲解AsyncTask的相关知识点。 1. **AsyncTask基本结构**: AsyncTask有三个泛型参数:Params, Progress, Result。Params是输入参数类型,Progress是后台任务进度的类型,Result是后台任务返回结果的类型...
"Asynctask异步加载的使用"这一主题涵盖了如何利用Android SDK中的AsyncTask类来实现后台任务的执行,并在UI线程更新结果。以下是对这个知识点的详细讲解: AsyncTask是Android提供的一种轻量级的异步处理机制,...
AsyncTask和Handler是Android系统提供的两种主要的异步处理机制,它们都可以用来更新UI并实现进度条的动态显示。下面将详细讲解这两种方式的工作原理和应用场景。 **AsyncTask** AsyncTask是一个轻量级的异步任务...
本篇将详细讲解如何使用AsyncTask实现大文件的下载。 AsyncTask有三个泛型参数:Params、Progress和Result。Params表示异步任务执行前需要的输入参数类型,Progress表示后台任务执行过程中更新进度的类型,Result则...
本教程将深入讲解AsyncTask的工作原理、如何创建和使用,以及如何实现对异步任务状态的监控,特别是关注任务的结束状态。 AsyncTask的核心理念是“后台计算,前台显示”,它提供了三个泛型参数:Params, Progress, ...
以从网上下载图片为例,讲解Android自带的异步操作类----AsyncTask类的用法 public class DownloadPicture extends AsyncTask, Integer, Bitmap> 其中包含三个异步操作类可供测试
本篇文章将详细讲解如何使用`AsyncTask`来获取并加载网络图片。 首先,我们了解`AsyncTask`的基本结构。`AsyncTask`定义了三个泛型参数:`Params`、`Progress`和`Result`,分别代表任务的输入参数类型、后台执行...
本篇文章将深入讲解如何使用`AsyncTask`进行图片的异步下载。 `AsyncTask`类包含三个泛型参数,分别代表参数类型(Params)、进度类型(Progress)和结果类型(Result)。在`AsyncTask`的生命周期中,有四个关键...
在Android平台上,录音功能是通过`MediaRecorder`类来实现的,而将录制的音频文件上传到服务器通常采用网络请求,这里使用了`AsyncTask`进行异步处理以避免阻塞UI线程。下面我们将详细讲解这两个核心知识点。 首先...
本教程将详细讲解如何在Android Studio中结合ListView、Adapter和AsyncTask实现异步数据加载。 首先,我们需要了解ListView的基本用法。ListView是一种可以滚动并显示多个同种类型的视图组件,通过Adapter进行数据...
本篇将详细讲解如何在Android中使用AsyncTask实现多线程计数,并展示如何将计数结果显示到UI。 首先,我们需要理解Android的线程模型。Android应用的主要工作线程是主线程,也称为UI线程。这个线程负责绘制和交互UI...
当`BaseAdapter`和`AsyncTask`结合使用时,可以实现异步加载数据并动态更新ListView。例如,你可能在`doInBackground()`方法中从网络或数据库加载数据,然后在`onPostExecute()`中将新数据传递给`BaseAdapter`的`...
接下来,要将录制的音频文件上传到服务器,可以使用`AsyncTask`,这是一种在Android中执行后台任务的机制,避免了主线程被长时间阻塞导致应用无响应。以下是一个简单的`AsyncTask`实现: ```java private class ...
AsyncTask是个不错的东西,可以使用它来做下载进度条。代码讲解如下: package com.example.downloadfile; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net....
在这个案例中,使用了Android SDK内置的`AudioRecord`类来实现录音,并通过`AsyncTask`执行后台任务来上传文件,以避免阻塞主线程,提供良好的用户体验。下面将详细讲解这些知识点。 1. **Android 音频录制**: - ...
本篇文章将深入讲解如何在Android中使用`AsyncTask`来实现下载文件并动态更新进度条的功能。 1. **AsyncTask简介** `AsyncTask`是Android提供的一个用于在后台线程执行计算任务并在UI线程更新结果的工具。它包含三...