android快速响应(一)后台线程实例
2012-06-17 20:10
232 查看
当android的一个activity处理某些事情而占用大量的时间时,会导致程序反应慢,让用户感觉程序没有快速响应或程序已停止。解决方法有两种:使用后台线程和使用android提供的AsynTask类。
创建一个handler类的实例,后台线程向handler发送消息,然后刷新UI,达到快速响应的目的。handler通信的方式有两种:message和Runnable对象。下面是通过handler更新progressBar的例子的不同写法:
1、message对象的实例:
创建一个handler类的实例,后台线程向handler发送消息,然后刷新UI,达到快速响应的目的。handler通信的方式有两种:message和Runnable对象。下面是通过handler更新progressBar的例子的不同写法:
1、message对象的实例:
import android.R; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.ProgressBar; public class ExpThreader extends Activity { private ProgressBar pBar; private Handler handler; private Boolean isRunning = false; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); lp.setMargins(10, 10, 10, 10); pBar = new ProgressBar(this, null, R.attr.progressBarStyleHorizontal); pBar.setProgress(0); pBar.setMax(50); layout.addView(pBar, lp); setContentView(layout); isRunning = true; handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub Integer add = (Integer) msg.obj; pBar.incrementProgressBy(add); } }; new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 100 && isRunning; i++) { try { Thread.sleep(200); Message m = handler.obtainMessage(0, 1);// 1为message传递的add值 handler.sendMessage(m);//向handler发送消息 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }).start(); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); isRunning = false; } }2、Runnable对象的post例子:
import android.R; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.ProgressBar; public class ExpThreader extends Activity { private ProgressBar pBar; private Handler handler; private Boolean isRunning = false; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); lp.setMargins(10, 10, 10, 10); pBar = new ProgressBar(this, null, R.attr.progressBarStyleHorizontal); pBar.setProgress(0); pBar.setMax(50); layout.addView(pBar, lp); setContentView(layout); isRunning = true; handler = new Handler(); new Thread() { @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 100 && isRunning; i++) { try { Thread.sleep(200); handler.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub pBar.incrementProgressBy(1); } }); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }.start(); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); isRunning = false; } }两个例子的效果是一样的,如图:
相关文章推荐
- Android后台线程和UI线程通讯实例
- android快速响应(二)AsyncTask实例!异步下载图片
- Android 后台线程实例
- Android 快速使用正则表达式,校验身份证号的实例
- Android多线程任务优化2:实现后台预读线程
- Android中UI线程与后台线程交互设计的5种方法
- Android多线程任务优化2:实现后台预读线程 .
- [Android实例] 销毁activity时注意关闭线程
- 实例分析Android中HandlerThread线程用法
- Android HTTP实例:发送请求和接收响应的小demo
- 优化 Android 线程和后台任务开发
- android120--后台线程与UI交互
- Android多线程任务优化2:实现后台预读线程
- Android快速实现发送邮件实例
- 【Handler】在Android中使用Handler和Thread线程执行后台操作
- 实例、运行-Android实现程序前后台切换效果-by小雨
- Android中UI线程与后台线程交互设计的5种方法
- Android中UI线程与后台线程交互设计的5种方法
- Android 单线程模型详解及实例
- Android 主线程handler 和子线程handler的通讯实例,图灵机器人(本地模拟回复,暂时没有网络请求)