当前位置:首页 » 安卓系统 » android异步调用

android异步调用

发布时间: 2024-07-19 05:18:37

Ⅰ 如何在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组件上。

Ⅱ 在Android中什么是异步执行

我来给你讲解一下异步的使用吧,
如果你不是开发人员,直接跳到第三,异步的概念 和 同步的区别:
一、在你的Activity中写一个内部类:
private class TestAsyncTask extends AsyncTask<String, Void, Boolean>
{
@Override
protected void onPreExecute()
{
//最先执行的就是这个。
}

@Override
protected Boolean doInBackground(String... params)
{
//这个是在后台执行的东西,就是说,它自动另外开了个线程运行,不影响你现在做的东西。
}

@Override
protected void onPostExecute(Boolean result)
{
if (result)
{
//后台执行的完毕后,它会用Result通知这里,就是执行这里了。
}
else
{
//所以最好判断一下result,写个else,判断后台执行的东西是不是出问题了。
}
}
}

二,在你的onCreate的时候启动这个异步,启动代码如下:
new TestAsyncTask().execute("");

三,异步 和 同步的区别
异步的好处,就是把一些东西,特别是耗时间的东西扔到后台去运行了,doInBackground,程序可以继续做自己的事情,防止程序卡在那里失去响应。
同步执行的话,就是程序会呆板地从头执行到尾,耗时间的东西不执行完,程序不会继续往下走,等待时间长的话,有时候就会造成失去响应了。

我就是搞开发的,呵呵。我的代码你直接贴进去就能用的。打字贴代码辛苦啊~~望采纳。也欢迎追问

Ⅲ android activity 中的 service 方法是否异步执行拜托各位大神

异步执行
android中,activity、service都是在主线程,service与activity的主要区别就是service没有前台界面,不能直接与用户交互,另外可以相对保证不会被系统随便的kill掉。所以service适用于一些无需交互的后台操作,但如果你直接在service中进行耗时操作的话,因为在主线程所以依然会出现和activity主线程一样的超时的问题,所以好的方式是在service中启动其他的线程去执行耗时操作。

Ⅳ android异步网络加载怎么实现

以自定义ListView,异步加载网络图片示例,总结了Android开发过程中,常用的三种异步加载的技术方案。

相关资源:

<manifestxmlns:android="http://schemas.android.com/apk/res/android"
02package="com.doodle.asycntasksample"
03android:versionCode="1"
04android:versionName="1.0">
05
06<uses-sdk
07android:minSdkVersion="8"
08android:targetSdkVersion="15"/>
09
10<uses-permissionandroid:name="android.permission.INTERNET"/>
11
12<application
13android:icon="@drawable/ic_launcher"
14android:label="@string/app_name"
15android:theme="@style/AppTheme">
16<activity
17android:name="com.doodle.asynctasksample.ThreadHandlerPostActivity">
18</activity>
19<activityandroid:name="com.doodle.asynctasksample.AsyncTastActivity">
20</activity>
21<activityandroid:name="com.doodle.asynctasksample.ThreadHandlerActivity">
22</activity>
23<activity
24android:name="com.doodle.asynctasksample.BootActivity"
25android:label="@string/title_activity_boot">
26<intent-filter>
27<actionandroid:name="android.intent.action.MAIN"/>
28<categoryandroid:name="android.intent.category.LAUNCHER"/>
29</intent-filter>
30</activity>
31</application>
32
33</manifest>

list_item.xml

01<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
02xmlns:tools="http://schemas.android.com/tools"
03android:layout_width="match_parent"
04android:layout_height="match_parent">
05
06<LinearLayout
07android:layout_width="match_parent"
08android:layout_height="150dp"
09android:layout_alignParentLeft="true"
10android:layout_alignParentRight="true"
11android:layout_alignParentTop="true">
12
13<ImageView
14android:id="@+id/imageView"
15android:layout_width="match_parent"
16android:layout_height="match_parent"
17android:src="<ahref="http://my.oschina.net/asia"target="_blank"rel="nofollow">@android</a>:drawable/alert_dark_frame"/>
18
19</LinearLayout>
20
21</RelativeLayout>

ImageAdapter.java

01/**
02*.
03*
04*.Inthis
05*
06*ListView.
07*
08*@authorJie.GengAug01,2012.
09*
10*/
{
12privateContextcontext;
13privateList<HashMap<String,Object>>listItems;
;
15
16publicImageViewimageView;
17
18publicImageAdapter(Contextcontext,List<HashMap<String,Object>>listItems){
19super();
20this.context=context;
21this.listContainer=LayoutInflater.from(context);
22this.listItems=listItems;
23}
24
25@Override
26publicintgetCount(){
27returnlistItems.size();
28}
29
30@Override
31publicObjectgetItem(intposition){
32returnnull;
33}
34
35@Override
36publiclonggetItemId(intposition){
37return0;
38}
39
40@Override
41publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
42if(convertView==null){
43convertView=listContainer.inflate(R.layout.list_item,null);
44imageView=(ImageView)convertView.findViewById(R.id.imageView);
45convertView.setTag(imageView);
46}else{
47imageView=(ImageView)convertView.getTag();
48}
49imageView.setImageDrawable((Drawable)listItems.get(position).get("ItemImage"));
50returnconvertView;
51}

Handler简介 Handler为Android提供了一种异步消息处理机制,它包含两个队列,一个是线程列队,另一个是消息列队。使用post方法将线 程对象添加到线程队列中,使用sendMessage(Message message)将消息放入消息队列中。当向消息队列中发送消息后就立 即返回,而从消息队列中读取消息对象时会阻塞,继而回调Handler中public void handleMessage(Message msg)方法。因此 在创建Handler时应该使用匿名内部类重写该方法。如果想要这个流程一直执行的话,可以再run方法内部执行postDelay或者 post方法,再将该线程对象添加到消息队列中重复执行。想要停止线程,调用Handler对象的removeCallbacks(Runnable r)从 线程队列中移除线程对象,使线程停止执行。

Ⅳ android网络请求数据是同步还是异步

异步请求,因为UI线程(主线程)不允许有5秒以上的耗时操作.在主线程网络请求会导致阻塞,看起来程序就像假死了一样.所以都是异步请求.

热点内容
wincc图形编译在哪里 发布:2024-09-17 03:58:26 浏览:977
androidubuntu 发布:2024-09-17 03:50:27 浏览:701
识梦源码 发布:2024-09-17 03:50:18 浏览:26
诺基亚密码忘了打什么电话 发布:2024-09-17 03:27:09 浏览:555
树深度优先算法 发布:2024-09-17 03:26:58 浏览:472
跳转页源码 发布:2024-09-17 03:13:05 浏览:543
html文件上传表单 发布:2024-09-17 03:08:02 浏览:785
聊天软件编程 发布:2024-09-17 03:00:07 浏览:726
linuxoracle安装路径 发布:2024-09-17 01:57:29 浏览:688
两个安卓手机照片怎么同步 发布:2024-09-17 01:51:53 浏览:207