【AsyncTask】Android AsyncTask使用入门

最近要使用AsyncTask做一些后台工作,今天先发一个入门的程序,待linc使用熟练后再发个心得。呵呵。当然,做后台工作可以使用Thread直接来搞。

好吧,这个例子最简单了,直接上代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<? xml  version = "1.0"  encoding = "utf-8" ?>
< LinearLayout  xmlns:android = "http://schemas.android.com/apk/res/android"
     android:orientation = "vertical"
     android:layout_width = "fill_parent"
     android:layout_height = "fill_parent" >
     < TextView
         android:id = "@+id/Text"
         android:layout_width = "fill_parent"
         android:layout_height = "wrap_content"
         android:textSize = "30sp"
         android:textColor = "#FF0000"
         android:text = "@string/hello"
         />
     < Button
         android:id = "@+id/BtnCancel"
         android:layout_width = "fill_parent"
         android:layout_height = "wrap_content"
         android:text = "Cancel"
         />
</ LinearLayout >
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package  com.linc.TestAsyncTask;
 
import  android.app.Activity;
import  android.os.AsyncTask;
import  android.os.Bundle;
import  android.os.SystemClock;
import  android.view.View;
import  android.widget.Button;
import  android.widget.TextView;
import  android.widget.Toast;
 
public  class  TestAsyncTask  extends  Activity {
     private  TextView textView;
     private  Button btnCancel;
 
     private  mAsyncTask mTask;
 
     @Override
     public  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.main);
 
         textView = (TextView) findViewById(R.id.Text);
         textView.setText( "准备" );
 
         btnCancel = (Button) findViewById(R.id.BtnCancel);
         btnCancel.setOnClickListener( new  View.OnClickListener() {
 
             @Override
             public  void  onClick(View v) {
                 // TODO Auto-generated method stub
                 mTask.cancel( true );
             }
         });
 
         mTask =  new  mAsyncTask();
         mTask.execute( "开始" );
     }
 
     // 其中
     // 参数1:向后台任务的执行方法传递参数的类型;
     // 参数2:在后台任务执行过程中,要求主UI线程处理中间状态,通常是一些UI处理中传递的参数类型;
     // 参数3:后台任务执行完返回时的参数类型 。
     private  class  mAsyncTask  extends
             AsyncTask<String /** 参数1 */ , String /** 参数2 */ , String /** 参数3 */ > {
         @Override
         protected  String /** 参数3 */ doInBackground(String... params /** 参数1 */ ) {
             String pre = params[ 0 ];
             for  ( int  i =  0 ; i <  5 ; i++) {
                 publishProgress(pre + i /** 参数2 */ );
                 SystemClock.sleep( 1000 );
             }
             return  "结束" ;
         }
 
         @Override
         protected  void  onPostExecute(String result /** 参数3 */ ) {
             super .onPostExecute(result);
             Toast.makeText(TestAsyncTask. this , result, Toast.LENGTH_SHORT)
                     .show(); // 提示任务结束
             textView.setText(result);
         }
 
         protected  void  onPreExecute() {
             Toast.makeText(TestAsyncTask. this "开始执行任务"  this ,
                     Toast.LENGTH_SHORT).show();
         }
 
         //
         protected  void  onProgressUpdate(String... values /* 参数2 */ ) {
             // textView.append(values[0]);
             textView.setText(values[ 0 ]);
         }
 
         // onCancelled方法用于在取消执行中的任务时更改UI
         @Override
         protected  void  onCancelled() {
             textView.setText( "cancelled" );
         }
     }
}

使用时要注意api文档中线程规则第四条:The task can be executed only once (an exception will be thrown if a second execution is attempted.)

也就是说,一个asyncTask只能使用一次,当你想再次使用的话,只好再new一个任务,否则要报异常的。

ERROR/AndroidRuntime(1936): FATAL EXCEPTION: main
ERROR/AndroidRuntime(1936): java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值