第十三节(Handler的使用一)
程序员文章站
2022-07-14 19:14:29
...
Handler
如果在一个打开的Activity中进行一些耗时的操作,会影响用户体验。比如,下载文件。。。
Handler主要是提供异步处理任务的功能。
线程队列,有任务就放到Handler线程队列中,Handler会依次进行调用
消息队列,将消息放到Handler消息队列中,Handler依次取出进行处理
Handler简单使用,使用线程队列
//声明Handler:处理线程的队列 Handler handler = new Handler(); //线程,run方法里写需要执行的任务 Runnable runnable_thread = new Runnable() { @Override public void run() { //提示1个消息 Toast.makeText(HandlerTestActivity.this, "hello", Toast.LENGTH_LONG).show(); //延时5000毫秒再次将线程加入队列 handler.postDelayed(runnable_thread, 5000); } }; //将线程加入队列 handler.post(runnable_thread); //删除回调任务 handler.removeCallbacks(runnable_thread);
Handler结合ProgressBar,使用线程队列和消息队列
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; public class HandlerProgressBarActivity extends Activity { /** Called when the activity is first created. */ Button btn01; ProgressBar proBar01; int i=0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn01 = (Button) findViewById(R.id.btn01); proBar01 = (ProgressBar) findViewById(R.id.bar01); btn01.setOnClickListener(new BtnStart()); } class BtnStart implements OnClickListener{ @Override public void onClick(View arg0) { //将线程任务加入线程队列 handler.post(updateBarThread); } } Handler handler = new Handler(){ //复写handleMessage方法,接收线程队列任务发送的消息 @Override public void handleMessage(Message msg) { proBar01.setProgress(msg.arg1); proBar01.setSecondaryProgress(msg.arg2); handler.post(updateBarThread); } }; Runnable updateBarThread = new Runnable() { @Override public void run() { if(i<proBar01.getMax()){ if(i==0){ proBar01.setVisibility(ProgressBar.VISIBLE); } i+=10; Message msg = handler.obtainMessage(); msg.arg1 = i; msg.arg2 = i+10; //将消息加入消息队列,由消息队列来处理 handler.sendMessage(msg); try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ proBar01.setVisibility(ProgressBar.GONE); i=0; handler.removeCallbacks(updateBarThread); } } }; }
上一篇: 第十三节(Handler的使用一)
下一篇: 第十一节(Android常见控件二)