AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程

好了,我们就看看效果

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.multithreadind01.MainActivity" > <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/textView1"
android:layout_marginRight="53dp"
android:text="Button" /> <ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_marginTop="84dp" >
</ListView> <!-- 进度条 -->
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/listView1"
android:layout_alignRight="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="28dp" /> </RelativeLayout>

效果图:

  

item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/username"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="60dp"
android:textSize="45dp"
     android:text="1"
/> <TextView
android:id="@+id/sex"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="60dp"
android:textSize="45dp"
android:text="2"
/>
</LinearLayout>

效果图:

java代码: User实体类

package com.example.multithreadind01;

public class User {
private String username;
private String sex;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
} }

MainActivity.java

package com.example.asynctask;

import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView; public class MainActivity extends Activity {
private TextView tv1;//item.xml里的TextView:Textviewname
private TextView tv2;//item.xml里的TextView:Textviewage
private Button bt;//activity_main.xml里的Button
private ListView lv;//activity_main.xml里的ListView
private BaseAdapter adapter;//要实现的类
private List<User> userList = new ArrayList<User>();//实体类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); bt = (Button) findViewById(R.id.Button);
lv = (ListView) findViewById(R.id.listView1); //模拟数据库
for (int i = 0; i < 5; i++) {
User ue = new User();//给实体类赋值
ue.setName("小米"+i);
ue.setAge("18");
userList.add(ue);
} bt.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
MyTask mt = new MyTask(MainActivity.this);
mt.execute(userList,adapter);//里面的参数是传给doInBackground }
}); adapter = new BaseAdapter() {
@Override
public int getCount() {
// TODO Auto-generated method stub
return userList.size();//数目
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = MainActivity.this.getLayoutInflater();
View view; if (convertView==null) {
//因为getView()返回的对象,adapter会自动赋给ListView
view = inflater.inflate(R.layout.item, null);
}else{
view=convertView;
Log.i("info","有缓存,不需要重新生成"+position);
}
tv1 = (TextView) view.findViewById(R.id.Textviewname);//找到Textviewname
tv1.setText(userList.get(position).getName());//设置参数 tv2 = (TextView) view.findViewById(R.id.Textviewage);//找到Textviewage
tv2.setText(userList.get(position).getAge());//设置参数
return view;
}
@Override
public long getItemId(int position) {//取在列表中与指定索引对应的行id
return 0;
}
@Override
public Object getItem(int position) {//获取数据集中与指定索引对应的数据项
return null;
}
};
lv.setAdapter(adapter); } }

MyTask.java //也是继承AsyncTask这个重点的类

package com.example.asynctask;

import java.util.List;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.BaseAdapter;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class MyTask extends AsyncTask{
private MainActivity activity;
private BaseAdapter adapter;
private List<User> userList;
public MyTask(MainActivity activity){
this.activity = activity;
}
@Override
protected Object doInBackground(Object... params) {
userList = (List<User>) params[0];
adapter = (BaseAdapter) params[1];
for (int i = 0; i < userList.size(); i++) {
//模拟网络
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} userList.get(i).setName("小红"+i);//模拟网络悄悄的更改name
userList.get(i).setAge("2"+i);
publishProgress(i);
}
return "你好";
}
//准备
@Override
protected void onPreExecute() {
Toast.makeText(activity, "开始中", Toast.LENGTH_SHORT).show();
}
//做完后执行
@Override
protected void onPostExecute(Object result) {
String r = result.toString();//得到返回值
TextView tv = (TextView)activity.findViewById(R.id.textView1);
tv.setText(r+"访问完成!"); }
//分步完成
@Override
protected void onProgressUpdate(Object... values) { int bar = Integer.parseInt(values[0].toString()); bar = (bar+1)*20;
ProgressBar progressBar = (ProgressBar)activity.findViewById(R.id.ProgressBar);//进度条
progressBar.setProgress(bar);
adapter.notifyDataSetChanged();
} }

打开效果图:

点击按钮效果图:

接着进度条开始加载;并且ListView的只也在一一更换 图下:

最后结果:

Android_AsyncTask异步任务(一)的更多相关文章

  1. Android_AsyncTask异步任务机制

    今天我们学习了 AsyncTack, 这是一个异步任务. 那么这个异步任务可以干什么呢? 因为只有UI线程,即主线程可以对控件进行更新操作.好处是保证UI稳定性,避免多线程对UI同时操作. 同时要把耗 ...

  2. Android_AsyncTask异步类

    ·AsyncTask是一个轻量级的异步抽象类 ·Android程序刚启动时,会同时启动一个像一个的主线程,这个主线程主要负责处理与UI有关的事件,有时也被称为UI线程,Android app中必须遵循 ...

  3. Android备注26.Android异步任务(AsyncTask)

    转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.引言     我们知道Android的UI线程主要负责处理用户的按键事件.用户触屏事件及屏幕画 ...

  4. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  5. C#异步编程(一)

    异步编程简介 前言 本人学习.Net两年有余,是第一次写博客,虽然写的很认真,当毕竟是第一次,肯定会有很多不足之处, 希望大家照顾照顾新人,有错误之处可以指出来,我会虚心接受的. 何谓异步 与同步相对 ...

  6. redux-amrc:用更少的代码发起异步 action

    很多人说 Redux 代码多,开发效率低.其实 Redux 是可以灵活使用以及拓展的,经过充分定制的 Redux 其实写不了几行代码.今天先介绍一个很好用的 Redux 拓展-- redux-amrc ...

  7. C#与C++的发展历程第三 - C#5.0异步编程巅峰

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...

  8. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  9. 异步编程 In .NET

    概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...

随机推荐

  1. 关于分页接口设计(下拉刷新上拉加载原理,解决page count请求重复数据的问题)

  2. 理解数据库的PDO处理的理念

    做第一份工作的时候,脑海里没有数据安全性的概念,从来没有网站被黑客盯上的事情.网站用户量也不大,虽然工作繁忙,但是只要代码上了线,基本上没有出过问题.在这个期间曾经做过一些傻的事情,认为sql写的越复 ...

  3. 今天遇到sqlyog连接不上阿里云的数据库,最后百度解决了...

  4. centos7删除自带openjdk

    一些开发版的centos会自带jdk,我们一般用自己的jdk,把自带的删除.先看看有没有安装java -version [root@java-test-01 ~]# java -version ope ...

  5. panel的展开,关闭的一种应用。

    js: <script type="text/javascript"> $('#p2').panel({ title: 'panel1', closable: fals ...

  6. mysql中binlog_format模式与配置详解

    mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复 ...

  7. [译]使用branch

    这篇文章将介绍Git分支. 首先, 看看如果创建分支, 这就像是request一个新的项目历史. 接着, 来看看git checkout是如果能被用来选择一个分支的. 最后, 学习用git merge ...

  8. [Python] 目录和文件操作

    在Linux系统下用Python写脚本,肯定不能避免各种与目录和文件夹有关的操作.为了以后方便查阅,简单地针对Python中与目录和文件夹有关的操作进行汇总. 需要实现导入的模块为: import o ...

  9. hihoCoder 1196 高斯消元·二

    Description 一个黑白网格,点一次会改变这个以及与其连通的其他方格的颜色,求最少点击次数使得所有全部变成黑色. Sol 高斯消元解异或方程组. 先建立一个方程组. \(x_i\) 表示这个点 ...

  10. 8.7 jquery-dom manipulation

    // 获得设定内容 [text(),html(),val()]; // 获得设定属性 [attr(),removeAttr()]; // 获得设定 css class [addClass,remove ...