android快速响应(一)后台线程实例

    当android的一个activity处理某些事情而占用大量的时间时,会导致程序反应慢,让用户感觉程序没有快速响应或程序已停止。解决方法有两种:使用后台线程和使用android提供的AsynTask类。

    创建一个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;
	}
} 
两个例子的效果是一样的,如图:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值