AsyncTask的使用

简单的AnsyTask的使用demo

1.定义一个模拟网络操作的类

package com.example.administrator.myapplication;

/**
 * Created by Administrator on 2016/7/11.
 * 模拟网络环境
 */
public class NetOperator {

    public void operation(){
        try {
            //睡眠一秒
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

2.定义AsnyTask的类

package com.example.administrator.myapplication;

import android.os.AsyncTask;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.TextView;

/**
 * Created by Administrator on 2016/7/11.
 * * 生成该类的对象,并调用execute方法之后
 * 首先执行的是onProExecute方法
 * 其次执行doInBackgroup方法
 */
public class ProgressBarAsyncTask extends AsyncTask {
    private TextView textView;
    private ProgressBar progressBar;

    ProgressBarAsyncTask(TextView textView, ProgressBar progressBar) {
        super();
        this.textView = textView;
        this.progressBar = progressBar;

    }

    @Override
    //被后台线程执行后,被UI线程被调用,一般用于初始化界面控件,如进度条
    protected void onPreExecute() {
        super.onPreExecute();
        Log.d("TEST","初始化操作");
    }

    @Override
    //在PreExcute执行后被启动AysncTask的后台线程调用,将结果返回给UI线程
    protected Object doInBackground(Object[] objects) {
        //这个方法执行多线程操作
        NetOperator netOperator = new NetOperator();
        int i = 0;
        for (i = 10; i <= 100; i += 10) {
            netOperator.operation();
            publishProgress(i);
        }
        Log.d("TEST","后台执行多线程");
         return i + objects.toString();
    }

    @Override
    //执行完后由UI线程调用,用于更新界面操作
    protected void onPostExecute(Object o) {
        textView.setText("异步执行操作结束!");
        Log.d("TEST","多线程执行结束");
    }

    @Override
    //更新进度条
    protected void onProgressUpdate(Object[] values) {
        int value= (int) values[0];
        progressBar.setProgress(value);
        Log.d("TEST","更新进度条");

    }
}

3.在Activity中使用

package com.example.administrator.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView myTextView;
    private ProgressBar myProcessBar;
    private Button myButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {
        myTextView = (TextView) findViewById(R.id.textView);
        myProcessBar = (ProgressBar) findViewById(R.id.progressBar);
        myButton = (Button) findViewById(R.id.button);

        myButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ProgressBarAsyncTask progressBarAsyncTask=new ProgressBarAsyncTask(myTextView,myProcessBar);
                progressBarAsyncTask.execute(1000);
            }
        });
    }
}
时间: 2024-10-11 03:27:58

AsyncTask的使用的相关文章

Handler, AsyncTask用法简单示例

package com.jim.testapp; import android.app.Activity; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import androi

Android异步加载全解析之使用AsyncTask

Android异步加载全解析之使用AsyncTask 概述 既然前面提到了多线程,就不得不提到线程池,通过线程池,不仅可以对并发线程进行管理,更可以提高他们执行的效率,优化整个App.当然我们可以自己创建一个线程池,不过这样是很烦的,要创建一个高效的线程池还是挺费事的,不过,Android系统给我吗提供了AsyncTask这样一个类,来帮助我们快速实现多线程开发,它的底层实现,其实就是一个线程池. AsyncTask初探 AsyncTask,顾名思义就是用来做异步处理的.通过AsyncTask,

android Asynctask的优缺点?能否同时并发100+asynctask呢?

一  Asynctask的优缺点? AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 优点: 1.简单,快捷 2.过程可控 3.使用的缺点: 缺点: 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. Android的AsyncTask比Handler更轻量级一些,适用于简单的异步处理. 首先明确Android之所以有Handle

AsyncTask实现网络图片的异步加载

想要实现网络中图片的加载,主线程是不行的,方法有两个,一个是使用线程Tread(),另一个就是使用AsyncTask,AsyncTask其实也是线程.我看过慕课网里边一个叫做<Android必学-异步加载>的视频,部分代码: 1 //-----------------------AsyncTask异步访问图片----------------------- 2 3 public void showImageByAsyncTask(ImageView imageView,String url){

Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

出处:http://blog.csdn.net/lmj623565791/article/details/37936275 1.概述 众所周知,Activity在不明确指定屏幕方向和configChanges时,当用户旋转屏幕会重新启动.当然了,应对这种情况,Android给出了几种方案: a.如果是少量数据,可以通过onSaveInstanceState()和onRestoreInstanceState()进行保存与恢复. Android会在销毁你的Activity之前调用onSaveInst

AsyncTask 和 Thread 区别

一.AsyncTask是封装好的线程池,比起Thread+Handler的方式,AsyncTask在操作UI线程上更方便,因为onPreExecute().onPostExecute()及更新UI方法onProgressUpdate()均运行在主线程中,这样就不用Handler发消息处理了:二.我不太同意封装好就会影响性能的说法,在我实际的运用中,真正的缺点来自于AsyncTask的全局线程池只有5个工作线程,也就是说,一个APP如果运用AsyncTask技术来执行线程,那么同一时间最多只能有5

异步任务 AsyncTask

注:转载注明出处 异步任务:用于解决线程之间的数据传递(UI线程不能完成耗时操作,由子线程完成) AsyncTask异步任务执行流程: 1 继承AsyncTask类 参数:parmas   progress  result class MyAsyncTask extends AsyncTask<String, Integer, Integer>{ 重写3个方法 A: protected void onPreExecute(){ 耗时操作之前的准备工作(主线程) super.onPreExecu

AsyncTask的简单使用

耗时操作和更新UI结合,以前用过Handler.就是新开线程,处理耗时操作,然后通过发送信息,Handler在UI线程更新UI. Android提供一个已经封装好的类AsyncTask,我们只需重写它的几个方法就行. //在execute(Params... params)被调用后立即执行,在doInBackground之前调用,UI线程 onPreExecute() //当doInBackground结束时,此方法将会被调用,UI线程 onPostExecute(Object o) //用于更

android AsyncTask介绍

本文转自:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html 写的很好,向你们推荐 android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主

Android-多线程AsyncTask

http://www.cnblogs.com/plokmju/p/android_AsyncTask.html AsyncTask,异步任务,可以简单进行异步操作,并把执行结果发布到UI主线程.AsyncTask是一个抽象类,它的内部其实也是结合了Thread和Handler来实现异步线程操作,但是它形成了一个通用线程框架,更清晰简单.AsyncTask应该被用于比较简短的操作(最多几秒钟).如果需要保持长时间运行的线程,可以使用ThreadPooExecutor或者FutureTask 首先来