AsyncTask的使用

原创 2015年07月07日 15:59:51

AsyncTask可以实现很简单的实现异步操作。
AsyncTask < Params, Progress, Progress >继承AsyncTask的时候需要定义三个参数的类型,第一个参数是调用异步方法时传进去的参数,如asyncTask.execute(1000);这里第一个参数使用的是Integer。第二个参数是调用publishProgress时传递的参数,改方法可以用于更新异步线程执行的进度,调用publishProgress会触发onProgressUpdate方法。第三个参数是异步方法执行结束后返回的结果。
AsyncTask可以重写5个方法:onPreExecute、onCancelled(onCancelled有两个方法,一个是不带参数的一个是带参数的,参数为执行结果)、doInBackground、onProgressUpdate、onPostExecute。
主线程使用asyncTask.execute来启动AsyncTask,启动后会先调用onPreExecute,可以执行一些初始化等的操作,然后会进行真正的异步方法doInBackground,在doInBackground中可以使用publishProgress触发onProgressUpdate方法。onPostExecute为异步方法结束后,处理结果的方法。使用asyncTask.cancel(true)可以中断异步方法,asyncTask.cancel(false)会运行异步方法运行结束。

以下是我自己写的测试代码:

package com.study.test;

import java.util.HashMap;
import java.util.Map;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends Activity {

    private Button button;
    private ProgressBar progressBar;
    private TextView textView;
    private Button cancelled;
    MAsyncTask asyncTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button1);
        cancelled = (Button) findViewById(R.id.button2);
        progressBar = (ProgressBar) findViewById(R.id.progressBar1);
        textView = (TextView) findViewById(R.id.textView1);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                textView.setVisibility(View.GONE);
                asyncTask = new MAsyncTask();
                asyncTask.execute(1000);
            }
        });
        cancelled.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                asyncTask.cancel(true);
            }
        });
    }

    public class MAsyncTask extends
            AsyncTask<Integer, Integer, Map<String, Integer>> {
        long starttime;

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            starttime = System.currentTimeMillis();
        }

        @Override
        protected void onCancelled() {
            // TODO Auto-generated method stub
            super.onCancelled();
        }

        @SuppressLint("NewApi")
        @Override
        protected void onCancelled(Map<String, Integer> result) {
            // TODO Auto-generated method stub
            super.onCancelled(result);
        }

        @Override
        protected Map<String, Integer> doInBackground(Integer... params) {
            // TODO Auto-generated method stub
            long span = 0;
            while (span < params[0]) {
                span = System.currentTimeMillis() - starttime;
                publishProgress(Integer
                        .valueOf((int) (span * 1f / params[0] * 100)));

            }
            return new HashMap<String, Integer>();
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            // TODO Auto-generated method stub
            super.onProgressUpdate(values);
            progressBar.setProgress(values[0]);
        }

        @Override
        protected void onPostExecute(Map<String, Integer> result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            if (result != null) {
                textView.setVisibility(View.VISIBLE);
            }
        }

    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

详解Android中AsyncTask的使用

在Android中实现异步任务机制有两种方式,Handler和AsyncTask。 Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更...
  • wy819
  • wy819
  • 2016-05-19 19:34
  • 59

详解Android中AsyncTask的使用

转自:http://blog.csdn.net/liuhe688/article/details/6532519 在Android中实现异步任务机制有两种方式,Handler和AsyncTask...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Handler机制和AsyncTask机制的使用

涉及的知识点: 1、Handler内存泄露问题的解决方法,使用弱引用的方式解决(http://blog.csdn.net/qq_28468727/article/details/52641501) 2...

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

在上一篇文章《Android缓存机制&一个缓存框架推荐》中说到,在了解了Android缓存机制后我准备自己动手写一个LruCache和DiskLruCache二级缓存的轻量级的图片请求框架,在思考如何...

Android中AsyncTask的使用(二)

在Android中实现异步任务机制有两种方式,Handler和AsyncTask。 Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界...

AsyncTask异步任务类的使用

异步任务类的使用是为了,能够通过子线程加载数据,而在Ui线程刷新界面 下面通过一个例子具体讲解异步任务类的使用 1定义异步任务类,异步任务类必须继承AsyncTask //三个参数的意义:第一个是启动...

AsyncTask的使用

AsyncTask类是android sdk提供的一个封装好的类,可以使任务在非UI Thread进行,而将实时结果以及最终结果回传给ui thread的一个框架.开发者无需进行thread的创建等操...
  • szxgg
  • szxgg
  • 2015-11-05 13:04
  • 207

AsyncTask的使用

我在我的智能语音文档转换中使用了asynctask,目的是将耗时的操作放到后台进行。 //当我们新建的类继承了AsyncTask时,会出现最基本的几个方法,然后我们把最耗时的操作(如联网操作...

AsyncTask的使用

import android.os.AsyncTask; import FileManagerService.OperationEventListener; abstract class BaseA...

AsyncTask的使用

class MyAsnycTask extends AsyncTask { @Override protected void onPreExecute() { super.onPreE...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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