【第22期】观点:IT 行业加班,到底有没有价值?

【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 后监听异步加载完毕的动作

AsyncTask 的使用方法网上有很多例子,使用起来也非常的方便。这里就不详细说具体的使用方法了,同学可以Google 一下,很多。   场景模拟 当我们在加载一个列表的时候,比如GridView ,这时候我们考虑到不阻塞UI的做法,一般会使用线程Thread 、Timer 或者使用AsyncTask ,而这些操作都是在在后台另外开一个线程给我们找数据,具体得到的数据需要使用Handler 去更新UI,AsyncTask 也是一样使用到的Handler 只是它将Handler 封装在了onPostExecute 执行操作中。而这一操作可能会产生一个问题,比如你有一个列表更新数据库使用

Android 使用AsyncTask 后监听异步加载完毕的动作

转载出处:http://terryblog.blog.51cto.com/1764499/508629/   AsyncTask 的使用方法网上有很多例子,使用起来也非常的方便。这里就不详细说具体...

欢迎关注CSDN程序人生公众号

关注程序员生活,汇聚开发轶事。

Android 使用AsyncTask 后监听异步加载完毕的动作

AsyncTask 的使用方法网上有很多例子,使用起来也非常的方便。这里就不详细说具体的使用方法了,同学可以Google 一下,很多。 场景模拟 当我们在加载一个列表的时候,比如GridView ,这时候我们考虑到不阻塞UI的做法,一般会使用线程Thread 、Timer 或者使用AsyncTask ,而这些操作都是在在后台另外开一个线程给我们找数据,具体得到的数据需要使用Handler 去更新UI,AsyncTask 也是一样使用到的Handler 只是它将Handler 封装在了onPostExecute 执行操作中。而这一操作可能会产生一个问题,比如你有一个列表更新数据库

AsyncTask使用入门

最近要使用AsyncTask做一些后台工作,今天先发一个入门的程序,待linc使用熟练后再发个心得。呵呵。当然,做后台工作可以使用Thread直接来搞。见之前的一篇文章《Android中线程和进度条的...

Android异步处理二:使用AsyncTask异步更新UI界面

在《Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面》中,我们使用Thread+Handler的方式实现了异步更新UI界面,这一篇中,我们介绍一种更为简洁的实现方式:使用AsyncTask异步更新UI界面。 概述: AsyncTask是在Andr
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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