android异步类AsyncTask的简单使用

Android为了降低这个开发难度,提供了AsyncTask。AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务,更通俗地说就是一个执行后台任务的线程

而且他还会自动通知主线程更新UI

优点:

  结构清晰,容易理解。

缺点

  代码量稍大

下面直接看代码


 1 private class AsyncLogin extends AsyncTask<Void,Integer,Boolean>{
2 private EditText passwordEdit;
3 private EditText studentIdEdit;
4 public boolean isClose=false;
      //构造函数
5 public AsyncLogin(EditText passwordEdit, EditText studentIdEdit) {
6 super();
7 this.passwordEdit = passwordEdit;
8 this.studentIdEdit = studentIdEdit;
9 }
10
11 private boolean checkResultCode(String code){
12 String message=codeToResult.get(code);
13 if(dialog.isShowing())
14 dialog.dismiss();
15 if(message==null){
16 return true;
17 }else{
18 Toast.makeText(MainActivity.this,
19 message,
20 Toast.LENGTH_LONG).show();
21 return false;
22 }
23 }
24
25 private void intentJump(){
26 if(!isClose){
27 Intent intent = new Intent(MainActivity.this,CourseListActivity.class);
28 intent.putExtra("sessionId", MainActivity.this.sessionId);
29 intent.putExtra("strUserName", this.studentIdEdit.getText().toString());
30 MainActivity.this.startActivity(intent);
31 MainActivity.this.finish();
32 }
33 }
34   //后台线程完成后调用此方法,在此方法中可以更新主线程UI
35 @Override
36 protected void onPostExecute(Boolean result) {
37 super.onPostExecute(result);
38 if(result){
39 if(checkResultCode(MainActivity.this.sessionId))
40 intentJump();
41 }else{
42 checkResultCode("000");
43 }
44 }
45 //后台任务,主要完成工作量大的任务
46 @Override
47 protected Boolean doInBackground(Void... params) {
48 String sessionId="";
49
50
51 try{
52 Thread.sleep(5000);
53 sessionId = webService.CheckLogin(
54 this.studentIdEdit.getText().toString(),
55 this.passwordEdit.getText().toString());
56 }catch(Exception e){
57 e.printStackTrace();
58 return false;
59 }
60 MainActivity.this.sessionId=sessionId;
61 return true;
62 }
  
       //开始执行前调用该方法
63 @Override
64 protected void onPreExecute() {
65 super.onPreExecute();
66 dialog = new ProgressDialog(MainActivity.this);
67 dialog.setCancelable(true);
68 dialog.setMessage("正在登录,请等待..");
69 dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
70 @Override
71 public void onCancel(DialogInterface dialog) {
72 if(asycLogin!=null)
73 asycLogin.cancel(true);
74 }
75 });
76 dialog.show();
77 }
78 }

new AsyncLogin(passwordEdit,studentIdEdit).execute();//开始任务

下面是接口方法

1、doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意不能直接操作UI。

2、onPostExecute(Result)  处理UI的方式,这里面可以使用在doInBackground
得到的结果处理操作UI。

3、onProgressUpdate(Progress…)   可以使用进度条增加用户体验度。
此方法在主线程执行,用于显示任务执行的进度。

4、onPreExecute()       
这当任务执行之前开始调用此方法,可以在这里显示进度对话框就好像上面代码一样。

5、onCancelled()          用户调用取消时,调用该方法

注意事项

AsynTask的实例必须在UI thread中创建。

   不要主动调用任何接口方法。

android异步类AsyncTask的简单使用,布布扣,bubuko.com

时间: 2024-09-20 12:29:57

android异步类AsyncTask的简单使用的相关文章

Android备注26.Android异步任务(AsyncTask)

转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.引言 我们知道Android的UI线程主要负责处理用户的按键事件.用户触屏事件及屏幕画图事件等,对于其它的操作尽量不要在UI线程中实现,由于这些操作非常有可能会堵塞UI线程,比方一些耗时操作,会导致UI界面停止响应,从而减少了用户的体验.所以,为了避免UI线程失去响应的问题,Android建议将耗时操作放在新线程中完毕.但新线程也可能须要动态更新UI组件:比方须要从网上获取一个网页,然后在T

Android笔记二十六.Android异步任务处理(AsyncTask)

转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.引言 我们知道Android的UI线程主要负责处理用户的按键事件.用户触屏事件及屏幕绘图事件等,对于其他的操作尽量不要在UI线程中实现,因为这些操作很有可能会阻塞UI线程,比如一些耗时操作,会导致UI界面停止响应,从而降低了用户的体验.所以,为了避免UI线程失去响应的问题,Android建议将耗时操作放在新线程中完成,但新线程也可能需要动态更新UI组件:比如需要从网上获取一个网页,然后在Te

Android异步之Asynctask与Handler面试七问

提出问题: 1.Android中的异步处理方式? 2.如何使用Handler以及在使用过程中如何避免Handler引起的内存泄露? 3.从源码角度分析MessageQueue,Message,handler,looper,主线程,子thread之间的关系 4.Handler通过sendMessage以及post Runable对象有什么区别 5.如何给一个线程建立消息循环,即如何构建一个looper线程? 6.Asynctask中有哪些方法,分别如何使用,哪些方法在主线程执行,哪些方法在子线程执

Android异步任务AsyncTask的使用与原理分析

在上一篇文章<Android缓存机制&一个缓存框架推荐>中说到,在了解了Android缓存机制后我准备自己动手写一个LruCache和DiskLruCache二级缓存的轻量级的图片请求框架,在思考如何搭建这个框架时,纠结于用何种方式去下载图片,是直接new出一个线程呢,还是用看起来稍微高大上档次一点的AsyncTask异步任务来处理?思来想去,还是虚荣心作怪,还是用AsyncTask吧,正好这个工具类我之前用的也比较少,对它的原理也不是很清楚,趁这个机会,好好学一下AsyncTask的

android 异步任务AsyncTask

package com.example.ansyctest; import java.io.ByteArrayOutputStream; import java.io.InputStream; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl

android异步请求asyncTask使用—分析getResponseCode()阻塞

在实际应用中经常会遇到比较耗时任务的处理,比如网络连接,数据库操作等情况时,如果这些操作都是放在主线程(UI线程)中,则会造成UI的假死现象,Android中可以使用AsyncTask和Handler两种异步方式来解决这种问题. AsyncTask(异步任务处理) 在使用AsyncTask时处理类需要继承AsyncTask,提供三个泛型参数,并且重载AsyncTask的四个方法(至少重载一个). An asynchronous task is defined by a computation t

android:异步任务asyncTask介绍及异步任务下载图片(带进度条)

为什么要用异步任务? 在android中只有在主线程才能对ui进行更新操作,而其它线程不能直接对ui进行操作 android本身是一个多线程的操作系统,我们不能把所有的操作都放在主线程中操作 ,比如一些耗时操作.如果放在主线程中 会造成阻塞 而当阻塞事件过长时 系统会抛出anr异常.所以我们要使用异步任务.android为我们提供了一个封装好的组件asynctask. AsyncTask可以在子线程中更新ui,封装简化了异步操作.适用于简单的异步处理.如果多个后台任务时就要使用Handler了

Android异步任务AsyncTask

1 package com.example.asynctask; 2 3 import java.net.MalformedURLException; 4 import java.net.URL; 5 6 import android.app.Activity; 7 import android.os.AsyncTask; 8 import android.os.Bundle; 9 import android.util.Log; 10 import android.view.Menu; 11

Android异步载入AsyncTask具体解释

曾看见有人说过.认为非常有道理.分享一下:   技术分为术和道两种:   (1)具体做事的方法是术.   (2)做事的原理和原则是道. 近期项目发现个重大问题.结果打log跟踪查是AsyncTask导致的.假设对AsyncTask了解的不够深入透彻.那写代码就是埋雷.以后不定在哪个时间爆炸.首先我们要了解,谷歌为什么发明AsyncTask,AsyncTask究竟是用来解决什么问题的?Android有一个原则---单线程模型的原则:UI操作并非线程安全的并且这些操作必须在UI线程中运行. 所以谷歌