码迷,mamicode.com
首页 > 移动开发 > 详细

android下的异步任务

时间:2015-05-12 12:56:10      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

异步任务一般用在加载一些网络资源的时候用,主要的实现方法是新建一个类来继承AsyncTask这个父类,然后复写该类下面的一些方法,其中doInBackground方法是必须要的,下面看代码

package com.example.test;

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

public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {
    private TextView textView;
    private ProgressBar progressBar;

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

    @Override
    protected void onPreExecute() {// in UI thread
        // TODO Auto-generated method stub
        super.onPreExecute();
        textView.setText("onPreExecute开始运行");
    }

    @Override
    protected String doInBackground(Integer... params) {// MainActivity传进来的参数
        // TODO Auto-generated method stub
        NetOperatior netOperatior = new NetOperatior();
        System.out.println("params" + params[0].intValue());// 测试传进来的值
        int i;
        for (i = 10; i <= 100; i += 10) {
            netOperatior.operate();// current thread sleep 1s
            publishProgress(i);// 执行onProgressUpdate(Integer... values)方法
        }
        return i + params[0].intValue() + "";
    }

    @Override
    protected void onPostExecute(String result) {// 由doInBackground(Integer...
                                                    // params)方法返回的值进行传递,在主UI线程中运行
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        textView.setText("the operation have done,the current value of i is ="
                + result);
    }

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

}

注意在这个类中的构造方法需要传递两个参数,一个是TextView,一个是ProgressBar,而在AsyncTask<Integer, Integer, String>中是你需要用到的类型的变量,其中第一个变量类型是由MainActivity.java中执行execute方法传递进去的参数。

那么MainActivity.java的代码:

技术分享
package com.example.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends Activity {
    private TextView textView;
    private ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.textView1);
        progressBar = (ProgressBar) findViewById(R.id.progressBar1);
        ProgressBarAsyncTask progressBarAsyncTask = new ProgressBarAsyncTask(
                textView, progressBar);
        progressBarAsyncTask.execute(1000);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
View Code

在异步任务类中有一个NetOperatior类,该类的用于主要用于模拟下载任务,里面的方法就是让当前的线程休息一秒,注意这里的线程不是在UI线程中执行的,而OnPreExecute()方法和OnPostExecute()方法是在UI线程中执行的,所以在这里都可以与界面进行交互。

NetOperatior.java:

package com.example.test;

public class NetOperatior {
    public void operate() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

android下的异步任务

标签:

原文地址:http://www.cnblogs.com/sowhat4999/p/4496713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!