Android线程总结笔记(1)——AsyncTask
来源:互联网 发布:知合控股 华夏幸福 编辑:程序博客网 时间:2024/05/21 13:23
android中实现子线程的方法有很多,首先就说说AsyncTask,这是android特意为更新UI设置的后台线程类,用起来十分方便,不过也有一些缺点,如果线程加载太多很容易出问题,详情可见AsyncTask的缺陷(http://www.oschina.net/question/54100_27825)。不过大部分时候用起来还是很不错的,因此对它先做一个总结。
最简单也最常用的就是后台更新加载数据或者其他耗时操作的进度条,我这里就以最简单的后台更新进度条为例进行一个示范,实现的功能就是点击按钮之后,初始化进度为0,然后子线程每秒钟将进度增加百分之十,直到百分之百。代码中有详细的注释,这里不做过多说明。
public class ThreadStudyActivity extends Activity { /** Called when the activity is first created. */private ProgressBar progressBar;private Button button;private int progress;//进度条进度 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); progressBar = (ProgressBar)findViewById(R.id.progressBar); progressBar.setVisibility(View.INVISIBLE);//先隐藏进度条 button = (Button)findViewById(R.id.button1); button.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View v){ new newTask().execute();//启动子线程 } }); } /** * 定义子线程类 * 继承于AsyncTask,其中<String, Integer, Boolean>代表的含义为: * String:函数 doInBackground(String... params)的参数类型 * Integer:函数onProgressUpdate(Integer... values)的参数类型 * Boolean:函数doInBackground(String... params)的返回值,以及onPostExecute(Boolean result)的参数类型,两者要一致 * 如果没有必要,以上三个参数也可以都定义为void * */private class newTask extends AsyncTask<String, Integer, Boolean> { // @SuppressWarnings("unused") /** * 启动子线程前执行的函数,可以进行显示进度条,赋初值等操作 * */protected void onPreExecute (){ progress = 0; progressBar.setVisibility(View.VISIBLE);//显示进度条 progressBar.setProgress(progress); Toast.makeText(ThreadStudyActivity.this, "子线程开始!", Toast.LENGTH_SHORT).show(); } /** * 子线程后台执行的程序,此处放置耗时操作 * 返回值同时作为onPostExecute(Boolean result)的参数 * */ protected Boolean doInBackground(String... params) { for(int i=0;i<10;i++){ try {Thread.sleep(1000);//延迟1秒钟} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} progress += 10; publishProgress(progress);//通知onProgressUpdate(Integer... values)函数进行更新UI,其中progress作为参数 } return true; } //在子线程执行过程中更新UI,此处为更新进度条 protected void onProgressUpdate(Integer... values) { progressBar.setProgress(values[0]); } //子线程执行结束后,更新UIprotected void onPostExecute(Boolean result) {if(result)Toast.makeText(ThreadStudyActivity.this, "子线程正常结束!", Toast.LENGTH_SHORT).show();progressBar.setVisibility(View.INVISIBLE);//隐藏进度条 } }}
贴上效果图:
1、点击按钮之前:
2、点击之后,子线程执行中:
end.......
- Android线程总结笔记(1)——AsyncTask
- Android线程总结笔记(1)——AsyncTask
- Android线程—AsyncTask
- android基础笔记——AsyncTask
- 服务(Service)——线程、AsyncTask
- Android开发总结笔记 AsyncTask 5-2
- 【Android】Android中的线程(AsyncTask)
- android基础知识02——线程安全5: AsyncTask
- Android——异步线程 handle和AsyncTask
- Android 学习笔记 Thread (二) android线程 Handler,AsyncTask例
- Android编程研究(一)——利用AsyncTask在异步线程上运行代码
- android之多线程工作(一)AsyncTask
- android 线程(AsyncTask,Threadhandler,intentService)详解
- android 线程之AsyncTask
- android线程、UI、AsyncTask
- Android AsyncTask异步线程
- Android AsyncTask异步线程
- Android线程----AsyncTask详解
- SQLiteHelper-SQLite帮助类
- TCP协议三次握手过程分析
- 第三届蓝桥杯预赛第九题——趣味算式
- 安卓学习路线
- java常见面试题及三大框架面试
- Android线程总结笔记(1)——AsyncTask
- Apache apr中内存分配子的current_free_index成员作用
- 大话设计模式_命令模式
- UpdateData(TRUE)、UpdateData(FALSE)
- 段式液晶学习
- int 15h
- [面向对象起源] 面向对象之父Alan Kay:预测未来,创造未来
- 国家及校级奖项、称号(中英对照)
- Easy Task