本文来自投稿,不代表长河网立场,转载请注明出处: http://www.changhe99.com/a/Jb604YB6l7.html
Android开发中handler如何使用
大家知道,Handler在Android中主要是负责发送和处理消息。它的主要用途大致是下面两个:1)按计划发送消息或执行某个Runnanble;2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)学写一下,在UI线程中,系统已经有一个Activity来处理了,你可以再起若干个Handler来处理。在实例化Handler的时候,只要有Handler的指针,任何线程也都可以sendMessage。 Handler对于Message的处理是异步处理的。一个Looper只有处理完一条Message才会读取下一条,所以消息的处理是阻塞形式的(handleMessage()方法里不应该有耗时操作,可以将耗时操作放在其他线程执行,操作完后发送Message(通过sendMessges方法),然后由handleMessage()更新UI)。 根据对视频的学习写了一个通过Button控件启动进度条(类似于下载等操作)的程序,简单介绍一下,有两个Button控件,一个是开始,点击之后会显示一个进度条以每次十分之一的进度进行(一开始是隐藏的),另一个是停止,可以中断进度。java代码: 1packagezzl.handleactivity; 2 3importandroid.app.Activity; 4importandroid.os.Bundle; 5importandroid.os.Handler; 6importandroid.os.Message; 7importandroid.view.Gravity; 8importandroid.view.View; 9importandroid.view.View.OnClickListener;10importandroid.widget.Button;11importandroid.widget.ProgressBar;12importandroid.widget.Toast;1314publicclassHandler_01extendsActivity{15 16 //声明变量17 privateButtonstartButton=null;18 privateButtonendButton=null;19 privateProgressBarfirstBar=null;20 privateToasttoast=null;21 @Override22 protectedvoidonCreate(BundlesavedInstanceState){23 super.onCreate(savedInstanceState);24 setContentView(R.layout.main);25 26 //根据ID获取对象27 startButton=(Button)findViewById(R.id.startButton);28 endButton=(Button)findViewById(R.id.endButton);29 firstBar=(ProgressBar)findViewById(R.id.firstBar);30 //给对象设置动作监听器31 startButton.setOnClickListener(newStartButtonListener());32 endButton.setOnClickListener(newEndButtonListener());33 }3435 classStartButtonListenerimplementsOnClickListener{3637 @Override38 publicvoidonClick(Viewv){39 //TODOAuto-generatedmethodstub40 //一开始执行,加入到消息队列,不延迟,41 //然后马上执行run方法42 firstBar.setVisibility(View.VISIBLE);43 firstBar.setMax(100);44 handler.post(upRunnable);45 toast=Toast.makeText(Handler_01.this,\"运行开始\",Toast.LENGTH_SHORT);46 toast.setGravity(Gravity.CENTER,0,0);47 toast.show();48 }49 }50 classEndButtonListenerimplementsOnClickListener{5152 @Override53 publicvoidonClick(Viewv){54 //TODOAuto-generatedmethodstub55 //停止56 handler.removeCallbacks(upRunnable);57 System.out.println(\"It\'stimetostop...\");58 }59 }60 61 //创建handler对象,在调用post方法62 //异步消息处理:将下载或者处理大数据等等单独放到另一个线程63 //更好的用户体验64 Handlerhandler=newHandler(){65 66 @Override67 publicvoidhandleMessage(Messagemsg){68 firstBar.setProgress(msg.arg1);69 firstBar.setSecondaryProgress(msg.arg1+10);70 //handler.post(upRunnable);71 if(msg.arg1
赞
(0)