AsyncTask 和 Handler
2015-07-21 17:58
309 查看
一、AsyncTask和Handler的初步了解
1.AsyncTask的初识
介绍:http://blog.sina.com.cn/s/blog_8417aea80100t6y2.html
使用实例:http://blog.csdn.net/qianfu111/article/details/10200105
附上使用实例中的代码
MainActivity:
package com.example.mygeneralutil;
import java.net.URI;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button mDownloadBtn;
private Button mCancelBtn;
private ImageView mImage1;
private ImageView mImage2;
private ProgressBar mProgress1;
private ProgressBar mProgress2;
private GetLogoFromInternet mTask;
private String TAG = "GetLogoFromInternet";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.asynctask_activity);
initComponent();
}
private void initComponent() {
mDownloadBtn = (Button) findViewById(R.id.button1);
mDownloadBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mTask = new GetLogoFromInternet();
mTask.execute(
"http://d.hiphotos.baidu.com/album/w%3D2048/sign=6b4e0cbb023b5bb5bed727fe02ebd439/7dd98d1001e939016245802e7aec54e736d1965e.jpg",
"http://a.hiphotos.baidu.com/album/w%3D2048/sign=4a44fc70342ac65c67056173cfcab311/b8389b504fc2d562f5f6f0fde61190ef76c66c27.jpg");
}
});
mCancelBtn = (Button) findViewById(R.id.button2);
mCancelBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mTask.cancel(true);
}
});
mImage1 = (ImageView) findViewById(R.id.imageView1);
mImage2 = (ImageView) findViewById(R.id.imageView2);
mProgress1 = (ProgressBar) findViewById(R.id.progressBar1);
mProgress2 = (ProgressBar) findViewById(R.id.progressBar2);
}
@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;
}
class GetLogoFromInternet extends AsyncTask<String, Integer, Bitmap> {
private Bitmap bitmap = null;
@Override
protected void onPreExecute() {
mImage1.setImageBitmap(null);
mImage2.setImageBitmap(null);
mProgress1.setProgress(0);
mProgress2.setProgress(0);
Log.e(TAG, "onPreExecute");
}
@Override
protected Bitmap doInBackground(String... params) {
publishProgress(0, 0);
HttpClient hc = new DefaultHttpClient();
publishProgress(30, 0);
HttpGet hg = new HttpGet();
Bitmap bitmap2 = null;
try {
hg.setURI(new URI(params[0]));
HttpResponse response = hc.execute(hg);
bitmap = BitmapFactory.decodeStream(response.getEntity()
.getContent());
publishProgress(100, 30);
hg.setURI(new URI(params[1]));
HttpResponse response2 = hc.execute(hg);
bitmap2 = BitmapFactory.decodeStream(response2.getEntity()
.getContent());
} catch (Exception e) {
Log.e(TAG, "" + e.getMessage());
}
publishProgress(100, 100);
Log.e(TAG, "doInBackground");
// mImage1.setImageBitmap(bitmap);//error
return bitmap2;
}
@Override
protected void onProgressUpdate(Integer... values) {
mProgress1.setProgress(values[0]);
mProgress2.setProgress(values[1]);
Log.e(TAG, "onProgressUpdate");
}
@Override
protected void onPostExecute(Bitmap result) {
if (result != null) {
mImage1.setImageBitmap(bitmap);
mImage2.setImageBitmap(result);
Toast.makeText(MainActivity.this,
"get image from network successful", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(MainActivity.this,
"get image from network error", Toast.LENGTH_SHORT)
.show();
}
Log.e(TAG, "onPostExecute");
}
@Override
protected void onCancelled() {
mProgress1.setProgress(0);
mProgress2.setProgress(0);
Log.e(TAG, "onCancelled");
}
}
}
布局文件:
<?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:background="#ffffff"
android:orientation="vertical" >
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/
9b16
imageView1"
android:layout_width="150dp"
android:layout_height="150dp" />
<ProgressBar
android:id="@+id/progressBar2"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="150dp"
android:layout_height="150dp" />
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="download image" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="cancel download image" />
</LinearLayout>
</ScrollView>
</LinearLayout>
2.Handler的初识
介绍:主要接受子线程发送的数据, 并用此数据配合主线程更新UI.
用法:之前曾使用过
二、AsyncTask 和 Handler的异同点
http://blog.sina.com.cn/s/blog_8417aea80100t6y2.html
http://blog.csdn.net/onlyonecoder/article/details/8484200
1.AsyncTask的初识
介绍:http://blog.sina.com.cn/s/blog_8417aea80100t6y2.html
使用实例:http://blog.csdn.net/qianfu111/article/details/10200105
附上使用实例中的代码
MainActivity:
package com.example.mygeneralutil;
import java.net.URI;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button mDownloadBtn;
private Button mCancelBtn;
private ImageView mImage1;
private ImageView mImage2;
private ProgressBar mProgress1;
private ProgressBar mProgress2;
private GetLogoFromInternet mTask;
private String TAG = "GetLogoFromInternet";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.asynctask_activity);
initComponent();
}
private void initComponent() {
mDownloadBtn = (Button) findViewById(R.id.button1);
mDownloadBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mTask = new GetLogoFromInternet();
mTask.execute(
"http://d.hiphotos.baidu.com/album/w%3D2048/sign=6b4e0cbb023b5bb5bed727fe02ebd439/7dd98d1001e939016245802e7aec54e736d1965e.jpg",
"http://a.hiphotos.baidu.com/album/w%3D2048/sign=4a44fc70342ac65c67056173cfcab311/b8389b504fc2d562f5f6f0fde61190ef76c66c27.jpg");
}
});
mCancelBtn = (Button) findViewById(R.id.button2);
mCancelBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mTask.cancel(true);
}
});
mImage1 = (ImageView) findViewById(R.id.imageView1);
mImage2 = (ImageView) findViewById(R.id.imageView2);
mProgress1 = (ProgressBar) findViewById(R.id.progressBar1);
mProgress2 = (ProgressBar) findViewById(R.id.progressBar2);
}
@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;
}
class GetLogoFromInternet extends AsyncTask<String, Integer, Bitmap> {
private Bitmap bitmap = null;
@Override
protected void onPreExecute() {
mImage1.setImageBitmap(null);
mImage2.setImageBitmap(null);
mProgress1.setProgress(0);
mProgress2.setProgress(0);
Log.e(TAG, "onPreExecute");
}
@Override
protected Bitmap doInBackground(String... params) {
publishProgress(0, 0);
HttpClient hc = new DefaultHttpClient();
publishProgress(30, 0);
HttpGet hg = new HttpGet();
Bitmap bitmap2 = null;
try {
hg.setURI(new URI(params[0]));
HttpResponse response = hc.execute(hg);
bitmap = BitmapFactory.decodeStream(response.getEntity()
.getContent());
publishProgress(100, 30);
hg.setURI(new URI(params[1]));
HttpResponse response2 = hc.execute(hg);
bitmap2 = BitmapFactory.decodeStream(response2.getEntity()
.getContent());
} catch (Exception e) {
Log.e(TAG, "" + e.getMessage());
}
publishProgress(100, 100);
Log.e(TAG, "doInBackground");
// mImage1.setImageBitmap(bitmap);//error
return bitmap2;
}
@Override
protected void onProgressUpdate(Integer... values) {
mProgress1.setProgress(values[0]);
mProgress2.setProgress(values[1]);
Log.e(TAG, "onProgressUpdate");
}
@Override
protected void onPostExecute(Bitmap result) {
if (result != null) {
mImage1.setImageBitmap(bitmap);
mImage2.setImageBitmap(result);
Toast.makeText(MainActivity.this,
"get image from network successful", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(MainActivity.this,
"get image from network error", Toast.LENGTH_SHORT)
.show();
}
Log.e(TAG, "onPostExecute");
}
@Override
protected void onCancelled() {
mProgress1.setProgress(0);
mProgress2.setProgress(0);
Log.e(TAG, "onCancelled");
}
}
}
布局文件:
<?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:background="#ffffff"
android:orientation="vertical" >
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/
9b16
imageView1"
android:layout_width="150dp"
android:layout_height="150dp" />
<ProgressBar
android:id="@+id/progressBar2"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="150dp"
android:layout_height="150dp" />
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="download image" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="cancel download image" />
</LinearLayout>
</ScrollView>
</LinearLayout>
2.Handler的初识
介绍:主要接受子线程发送的数据, 并用此数据配合主线程更新UI.
用法:之前曾使用过
二、AsyncTask 和 Handler的异同点
http://blog.sina.com.cn/s/blog_8417aea80100t6y2.html
http://blog.csdn.net/onlyonecoder/article/details/8484200
相关文章推荐
- nginx优化 突破十万并发
- 深入剖析Android音频之AudioTrack
- Qt、C++小票打印----网口
- 使用Cygwin在Windows上体验Linux的快感
- Ansible安装过程中遇到过的问题
- Android Studio 使用技巧(一)
- vs2010编译某个工程提示缺少lib或者头文件 vs2010的配置中的生成事件
- linux下搭建svn版本控制软件
- 剑指offer:数值的整数次方
- user版本如何打开uart,让android log从串口kernel log输出
- iOS获取UUID,并使用keychain存储
- 项目兼容多数据库构想
- 如何实现servlet的单线程模式
- 史上最全的html标签属性用法对照表
- PL/SQL Developer中文版下载以及使用图解(绿色版)
- 黑马程序员----运算符表达式
- 深入剖析Android音频之AudioSystem
- 移除HTML5 input在type="number"时的上下小箭头
- php-wamp环境搭建
- 如果2个数组重复的值,找出重复的值,在其中一个数组中去除