博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AsyncTask 异步消息处理机制
阅读量:4290 次
发布时间:2019-05-27

本文共 3282 字,大约阅读时间需要 10 分钟。

        Android 提供了一个好用的工具---AsyncTask ,方便我们在子线程中对 UI 进行操作,AsyncTask 背后的实现原理也是基于异步消息处理机制的。下面是AsyncTask的一个小demo。

1、效果图:

2、activity_main.xml中的代码:

3、MainActivity.java中的代码:

package com.demo.asynctaskdemo;import android.app.Activity;import android.app.ActionBar;import android.app.Fragment;import android.os.AsyncTask;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.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;import android.os.Build;public class MainActivity extends Activity {	private ProgressBar progress;	private TextView baifenbi ;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		progress = (ProgressBar) findViewById(R.id.progressBar);		baifenbi = (TextView) findViewById(R.id.baifenbi) ;		new MyTask().execute() ;	}	class MyTask extends AsyncTask
{ private static final String TAG = "MyTask"; /** * onPreExecute方法,在后台任务开始执行之前调用,用于进行一些界面上的初始化操作,比 如显示一个进度条对话框等。 */ @Override protected void onPreExecute() { // TODO Auto-generated method stub Toast.makeText(MyApplication.getContext(), "onPreExecute方法,界面上的初始化操作", 1).show(); } /** * doInBackground方法,在子线程中运行,去处理所有的耗时任 务. 任务完成可以通过 return 语句来将任务的执行结果返回, * 如果 AsyncTask 的 第三个泛型参数指定的是 Void,就可以不返回任务执行结果。 @ 注意,在这个方法中是不 可以进行 UI * 操作的,如果需要更新 UI元素, 比如说反馈当前任务的执行进度,可以调 用 * publishProgress(Progress...)方法来完成。 */ @Override protected Boolean doInBackground(Void... params) { // TODO Auto-generated method stub Log.d(TAG, "--doInBackground" + params); int progress = 1; while (true) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } publishProgress(progress); if (progress >= 100) { progress = 0 ; break; } progress++ ; } return true; } /** * 在后台任务中调用了 publishProgress(Progress...)方法后,这个方法就会被调用, * 方法中携带的参数就是在后台任务中传递过来的。 在这个方法中可以对 UI 进行操作,利用参数中的数值就可以对界面元素进行相应地更新。 */ @Override protected void onProgressUpdate(Integer... values) { // TODO Auto-generated method stub String text = "" ; if(values[0] == 100) { text = "下载完成" ; }else { text = values[0]+" %" ; } progress.setProgress(values[0]); baifenbi.setText(text); } /** * 后台任务执行完毕并通过 return 语句进行返回时,这个方法就会被调用。 * 返回的数据会作为参数传递到此方法中,可以利用返回的数据来进行一些 UI 操作, 比如说提醒任务执行的结果,以及关闭掉进度条对话框等。 */ @Override protected void onPostExecute(Boolean result) { // TODO Auto-generated method stub Toast.makeText(MyApplication.getContext(), "进入onPostExecute方法", 1).show(); } }}
4、MyApplication.java中的代码:
package com.demo.asynctaskdemo;import android.app.Application;import android.content.Context;public class MyApplication extends Application {	private static Context context;	@Override	public void onCreate() {		context = getApplicationContext();	}	public static Context getContext() {		return context;	}}
5、AndroidManifest.xml中的代码:
项目下载:

你可能感兴趣的文章
linux vmstat 1 ,watch , pmap -p,
查看>>
MYSQL 相关
查看>>
python 构建client 程序
查看>>
c++ 加载so动态库中的资源
查看>>
加解密 签名
查看>>
linux top 命令分析
查看>>
Linux vmstat命令详解
查看>>
linux pmap命令
查看>>
MySQL数据同步【双主热备】
查看>>
Mysql主从复制实践手册
查看>>
nginx配置正向代理支持HTTPS
查看>>
Perf -- Linux下的系统性能调优神器
查看>>
C++ 用libcurl库进行http通讯网络编程
查看>>
秒杀多线程第十篇 生产者消费者问题
查看>>
信号量与互斥锁
查看>>
linux 查看CPU个数,核数
查看>>
string 序列化
查看>>
va_start(),va_end()函数应用
查看>>
crontab命令
查看>>
State Threads——异步回调的线性实现
查看>>