① android中实现异步操作的方式有哪些,请简述各自的特点
AsyncTask类。这是安卓自带的异步加载类,封装较好,使用方便
直接开启子线程通过handler发送消息更新,代码繁琐一点,AsyncTask源码也是这个原理
② android为什么要用异步任务
一般Android中的异步都是用在网络请求时,而网络请求都有一些延时,如果都放在主线程中就会出现屏幕卡住的现象,这样会影响用户操作效果。。。
③ android 异步方法和子线程方法有什么区别
子线程没有控制并发数量,当并发过多的时候异步方法的作用就体现出来了。
异步是相对于同步而言的,顾名思义,同步就是各个通讯节点之间有统一的时钟,按照相同的时钟工作,异步相反,各节点之间没有统一的时钟,每个节点按照自己内部的时钟工作。
android在所有Thread当中,有一个Thread,我们称之为UI Thread。UI
Thread在Android程序运行的时候就被创建,是一个Process当中的主线程Main
Thread,主要是负责控制UI界面的显示、更新和控件交互。在Android程序创建之初,一个Process呈现的是单线程模型,所有的任务都在一个线程中运行。因此,我们认为,UI
Thread所执行的每一个函数,所花费的时间都应该是越短越好。而其他比较费时的工作(访问网络,下载数据,查询数据库等),都应该交由子线程去执行,以免阻塞主线程。
④ 如何在Android开发中用AsyncTask异步更新UI界面
在Android中实现异步任务机制有两种方式,Handler和AsyncTask。
Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制。
为了简化操作,Android1.5提供了工具类android.os.AsyncTask,它使创建异步任务变得更加简单,不再需要编写任务线程和Handler实例即可完成相同的任务。
先来看看AsyncTask的定义:
public abstract class AsyncTask<Params, Progress, Result> {}
三种泛型类型分别代表“启动任务执行的输入参数”、“后台任务执行的进度”、“后台计算结果的类型”。在特定场合下,并不是所有类型都被使用,如果没有被使用,可以用java.lang.Void类型代替。
一个异步任务的执行一般包括以下几个步骤:
1.execute(Params... params),执行一个异步任务,需要我们在代码中调用此方法,触发异步任务的执行。
2.onPreExecute(),在execute(Params... params)被调用后立即执行,一般用来在执行后台任务前对UI做一些标记。
3.doInBackground(Params... params),在onPreExecute()完成后立即执行,用于执行较为费时的操作,此方法将接收输入参数和返回计算结果。在执行过程中可以调用publishProgress(Progress... values)来更新进度信息。
4.onProgressUpdate(Progress... values),在调用publishProgress(Progress... values)时,此方法被执行,直接将进度信息更新到UI组件上。
5.onPostExecute(Result result),当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。
⑤ java或者android实现异步的方式只能用多线程吗,有没有其他的方式。
android中有AsyncQueryHandler和AsyncTask都是用来异步消息传递的,不过本质都是多线程,不过Android帮你封装好了方便调用而已。希望能够帮助到你!
⑥ android什么叫异步请求,怎么实现
一.异步请求主要解决线程无法更新UI组件的方案
使用Handler实现线程之间的通信。
Activity.runOnUiThread(Runnbale)
View.post(Runnable)
View.postDelayed(Runnable)
二.ANR异常
Android默认约定当UI线程阻塞超过20秒将会引发ANR异常。开发者必须牢记,不要在UI线程中执行一些耗时操作
三.AsyncTask抽象类
AsyncTask<Params,Progress,Result>是一个抽象类,通常用于被继承,继承AsyncTask需要指定三个泛型参数:
Params:启动任务执行的输入参数的类型
Progress:后台任务完成进度值得类型
Result:后台执行任务完成后返回结果的类型
四.AsyncTask的特点
更轻量一些,适用于简单的异步处理,不需要借助线程和Handler即可
五.使用AsyncTask的步骤
创建AsyncTask的子类,并为三个泛型参数指定类型,如果某个泛型参数不需要指定类型,可将它设为Void
根据需要,实现AsyncTask的如下方法:
doInBackground(Params...):后台线程将要完成的任务,可以调用publishProgress(Porgress...values)方法更新任务执行进度。
onProgressUpdate(Porgress..values):在doInBackground()方法中调用publishPorgress()方法更新任务的执行进度后,就会触发该方法
onPreExecute():执行后台耗时操作前被调用,通常用户完成一些初始化操作,比如在界面上显示进度条
onPostExecute(Result result):当doInBackground()完成后,系统会自动调用onPostExecute()方法,并将doInBackground()方法返回的值传给该方法.
调用AsyncTask子类的实例的execute(Params...params)开始执行耗时任务
六.使用AsyncTask时必须遵守的规则
必须在UI中创建AsyncTask的实例
必须在UI线程中调用AsyncTask的execute()方法
AsyncTask的onPreExecute()、onPostExecute(Result result)、doInBackground(Params....params)、onProgressUpdate(Progress...values)方法,不应该由程序员代码调用,而是由AsyncTask系统负责调用
每个AsyncTask只能被执行一次,多次调用将会引发异常。
⑦ Android异步更新UI的几种方法
android中有下列几种异步更新ui的解决办法:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
long) View.postDelayed(Runnable, long)
使用handler(线程间通讯)(推荐)
AsyncTask(
⑧ android sdk哪些异步方法
android中有下列几种异步更新ui的解决办法:
Activity.runOnUiThread(Runnable) View.post(Runnable) long) View.postDelayed(Runnable, long) 使用handler(线程间通讯)(推荐) AsyncTask(推荐)
对于下面这段代码:
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
mImageView.setImageBitmap(bitmap);
}
}).start();
}