- 浏览: 189140 次
- 性别:
- 来自: 郑州
最新评论
-
gaoyansansheng:
,第一个方法是全角符转半角符吧?
Android TextView自动换行文字排版参差不齐的原因 -
wyyl1:
牛逼!用第一个方法就行了,简单!
Android TextView自动换行文字排版参差不齐的原因 -
XuNiu:
好内容虽然过了这么久了,但是一定要赞一下
android 命名规范
本文章主要讲解下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只能被执行一次,否则多次调用时将会出现异常
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);
}
}
。
发表评论
-
android textview 特出显示
2013-04-22 19:40 1635在xml文件中使用android:textStyle=&qu ... -
反编译apk
2013-02-27 10:42 971工具下载:需用到dex2ja ... -
Android 通过字符串来获取R下面资源的ID 值
2013-01-30 14:33 1197方法一: try{ Field field= ... -
android禁止锁屏保持常亮 .
2012-12-26 11:12 4714在播放video的时候在mediaplayer mMedia ... -
Eclipse开发Android的配置(包括ADT安装,SDK配置)
2012-12-08 12:35 18221. 下载Android SDK htt ... -
android 命名规范
2012-12-03 19:16 4145一、Android编码规范 1.java代码中不出现中文 ... -
div+css命名规范 嫁接android xml命名
2012-12-03 19:13 1087CSS命名规则 头:header 内容:co ... -
android 之 Task Activity .
2012-11-27 20:55 2588首先task包含一个或多个activity,它是安排在一个堆栈 ... -
最本质的多线程:hanlder和message机制:
2012-11-27 19:58 1703Android多线程 作者:陈 ... -
Android 重要包描述
2012-10-25 13:21 971在Android中,各种包写成android.* 的方式,重要 ... -
android.os.NetworkOnMainThreadException 异常处理
2012-10-20 15:12 1083android.os.NetworkOnMainThreadE ... -
android textview属性
2012-08-24 16:10 841android:autoLink设置是否当 ... -
GestureDetector.OnDoubleTapListener 和 GestureDetector.OnGestureListener
2012-07-20 21:30 1997android.view.GestureDetector. ... -
Android Google Map API的使用(一)
2012-07-17 20:49 1098Android中定义了一个名为com.google.andro ... -
Android中Context简介
2012-07-15 19:20 10364Context字面意思是上下文,位于framework pac ... -
XmlPullParser
2012-07-06 16:14 10314在Android中,如果要想完成PULL解析处理需要 o ... -
DocumentBuilder API 官方翻译(翻译有错的地方请多指正)
2012-07-04 12:27 1250public abstract class Document ... -
Android开发如何去除标题栏title
2012-07-02 18:18 778Android开发如何去除标题栏title 去除标题栏tit ... -
Android 获取存储卡路径和空间使用情况
2012-07-01 16:55 5700/** 获取存储卡路径 */ File sdc ... -
Problems occurred when invoking code from plug-in: "org.eclipse.core.resources".
2012-06-30 17:25 7567今天在写一个小例子时,处了一个错误让我找了一下午,下面是错误代 ...
相关推荐
早期版本使用单线程执行任务,后来改为多线程,但由于多线程可能导致线程安全问题,从 Android 3.0 开始,又改回了单线程模式。因此,开发者需要了解目标设备的 Android 版本,以便正确理解和使用 AsyncTask。 总的...
为了解决这个问题,Android提供了两种主要的多线程机制:AsyncTask和Handler机制。 1. **AsyncTask**:AsyncTask是一个轻量级的异步任务执行框架,适合执行短时间的后台任务并更新UI。它包含三个泛型参数,分别表示...
【Android多线程】\n\n在Android开发中,多线程是不可或缺的一部分,它能够提升应用程序的性能和用户体验。Android系统默认在一个主线程中运行应用程序,包括UI更新,如果在此线程中执行耗时操作,会导致用户界面...
Android多线程处理是移动应用开发中的关键概念,尤其是在性能优化和用户体验提升方面。Android系统采用的是单线程模型,即主线程(也称为UI线程)主要负责处理用户界面的交互和绘图,包括按键事件、触摸事件以及屏幕...
在Android应用开发中,AsyncTask是一个用于在后台线程执行耗时操作并更新UI的工具类,它是Android 1.5版本引入的。AsyncTask的设计初衷是为了简化异步编程,避免直接操作线程和Handler带来的复杂性。下面我们将详细...
在Android开发中,多线程断点下载是一项重要的技术,特别是在处理大文件下载时,能够提高效率并提供更好的用户体验。本资源"Android 多线程断点下载源码.zip"包含了一个实现这一功能的示例代码,对于学习和理解...
`AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间运行的任务放到后台线程,而将结果更新到主线程,这样可以避免主线程(UI线程)阻塞,提高应用的响应速度。`...
这款名为"支持android多线程下载功能源码.zip"的压缩包提供了一个实现这一功能的源码示例,方便开发者理解和应用。下面将详细解释多线程下载的基本原理、实现方法以及它在Android中的应用。 1. **多线程下载原理**...
在Android开发中,AsyncTask是一种轻量级的异步任务处理机制,主要用于UI线程与后台线程之间的通信,以实现耗时操作的异步执行,避免阻塞主线程,提高用户体验。`AsyncTask`类提供了简单易用的接口,使得开发者能够...
对于更复杂的多线程需求,如大数据处理、服务端同步等,可能需要考虑使用其他并发工具,如IntentService、Loader或Java的Executor框架。 在提供的"AsyncTask异步任务三"示例中,你将找到一个详尽的教程,演示如何在...
Android Asynctask 先小试牛刀,了解一下各个方法执行过程,关注博客http://himici.com/
这个压缩包“Android应用源码之讲多线程的操作方式.zip”很可能是提供了一些示例代码,用于演示如何在Android环境中有效地管理多线程。下面将详细讲解Android应用中多线程的操作方式及其重要性。 1. **主线程(UI...
总之,Android多线程断点下载是一个涉及网络编程、文件操作和线程管理等多个领域的复杂功能,理解和掌握这一技术对于提高Android应用的性能和用户体验至关重要。通过分析提供的源代码,开发者可以深入学习到这些知识...
本主题聚焦于"Android多线程文件上传",我们将探讨如何利用多线程技术来优化文件上传过程,提高效率,并确保应用的响应性。 一、多线程基础 多线程是并发执行多个任务的能力,它允许应用程序同时处理多个任务,提高...
总的来说,Android的多线程处理是通过合理的分配工作到主线程和工作线程来提高应用程序的响应速度和用户体验。AsyncTask作为其中的一种工具,提供了一种便捷的方式来执行后台任务并在完成后更新UI,避免了主线程的...
这个"Android多线程断点下载源码.zip"压缩包提供了一个完整的示例项目,可以帮助开发者理解和实现这一功能。下面我们将详细探讨这个项目中的关键知识点。 1. **多线程下载**: 在Android中,单线程下载速度有限且...
总的来说,Android的AsyncTask是实现多线程计数的一种简单而有效的方法,通过它可以轻松地在后台执行计算并在UI上实时显示结果,确保应用的流畅性。但同时也需注意其限制和潜在的性能问题,根据实际需求选择合适的...