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