【AsyncTask】Android AsyncTask使用入门

转载 2013年12月04日 18:36:33

最近要使用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)

相关文章推荐

Android入门教程 AsyncTask的使用及execute和executeOnExecutor方法

AsyncTask的使用分为三大步。 创建一个子类继承AsyncTask; 在子类中实现如下方法 doInBackground() onProgressUpdate() onPostExe...

Android asyncTask的使用

  • 2016年03月17日 13:46
  • 3.34MB
  • 下载

Android 入门 -- AsyncTask

异步任务机制(AsyncTask),目的是解决 Android 中不能在主线程中执行耗时操作的问题,由于 Android 系统的特性,如果在主线程中执行耗时操作,将会导致界面卡顿无法及时响应,容易引起...
  • TTCCAAA
  • TTCCAAA
  • 2015年04月22日 23:21
  • 1250

Android中AsyncTask的使用com.scott.async

  • 2016年04月02日 11:13
  • 5.03MB
  • 下载

Android入门笔记之AsyncTask

Android入门笔记之AsyncTask 简介 多线程是android重要的机制之一。 关键步骤        Android中通过AsyncTask和标准的Thread类来提供线程服务,将...
  • gmj4850
  • gmj4850
  • 2013年09月06日 20:49
  • 463

Android_AsyncTask使用

  • 2010年11月04日 09:57
  • 355KB
  • 下载

android使用AsyncTask来实现更新进度条

AsyncTask中有三个参数,如class MyTask extends AsyncTask{}   参数1:向后台任务执行过程方法传递参数的类型   参数2:在后台任务执行过程中,要求主UI线...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【AsyncTask】Android AsyncTask使用入门
举报原因:
原因补充:

(最多只允许输入30个字)