Android之Handler简单运用(控制进度条)
来源:互联网 发布:斯巴达刀座淘宝 编辑:程序博客网 时间:2024/06/08 03:25
Handler消息传递机制在android中至关重要,Android应用开发中,我们需要用线程周期性的改变控件的属性值,而此则需要Handler的消息机制去实现。
Handler类的主要作用与用法:
在新启动的线程中发送消息;在主线程获取,处理消息。
利用一个实例来介绍Handler的使用方法----Handler控制进度条。
资源文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 一个进度条控件 --> <ProgressBar android:id="@+id/bar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="200dp" android:layout_height="wrap_content" android:visibility="gone" /> <!-- 一个Button按钮控件 --> <Button android:id="@+id/startBtn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="start"/> </LinearLayout>
Activity代码:
package cn.android.handler;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;public class HandlerProgressBarActivity extends Activity implements OnClickListener{ //声明两个控件ProgressBar bar = null; Button startButton = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findViews(); } //通过控件ID得到控件private void findViews() {bar = (ProgressBar) this.findViewById(R.id.bar);startButton = (Button) this.findViewById(R.id.startBtn);//为控件添加监听器;bar.setOnClickListener(this);startButton.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.startBtn://设置进度条显示方式为可见bar.setVisibility(View.VISIBLE);//将线程添加到Handler消息队列updateBarHandler.post(updateThread);break;}}//使用匿名内部类Handler updateBarHandler = new Handler(){public void handleMessage(Message msg){bar.setProgress(msg.arg1);Log.i("SWORD", "startHandler");updateBarHandler.post(updateThread);}};//使用匿名内部类声明线程类Runnable updateThread = new Runnable(){int i = 0;public void run(){Log.i("SWORD", "Begin Thread");i+=10;//得到一个消息对象Message msg = updateBarHandler.obtainMessage();//将msg对象的arg1参数的值设置为i;msg.arg1 = i;try {//设置当前线程休眠1秒Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}//将msg对象加入到消息队列当中(尾部)updateBarHandler.sendMessage(msg);if(i==100){//如果当i的值为100时将当前线程从handler中移除updateBarHandler.removeCallbacks(updateThread);}}};}
在虚拟机上的运行效果:
- Android之Handler简单运用(控制进度条)
- android之Handler控制进度条
- android Handler控制进度条(ProgressBar)实例
- Android之利用Handler实现ProgressBar进度条
- Android进度条加载(handler+线程)
- Android消息机制(Handler),3种方式模拟简单进度条
- Android之Handler简单用法
- Android 倒计时跳转页面之handler的详细运用
- Android之Handler子线程的简单介绍(一)
- Android之Handler子线程的简单使用(二)
- 83 Android Handler ProgressBar 进度条
- Android Handler模拟进度条更新
- Android 超简单音乐播放器(七)拖动歌曲进度条~音量控制~
- 线程控制之进度条
- android线程控制进度条
- Android之RecyclerView控件的简单运用
- android学习笔记之handler简单实用
- Android线程Handler用法(二)---结合进度条例子(ProgressBar)
- Azure Storage Access Tools(工欲善其事必先利其器)
- 通过std::stringstream的read和write实现对二进制流的读写
- Loan Commitment
- SQL Update多表联合更新的方法
- Android 的 Recovery 分析
- Android之Handler简单运用(控制进度条)
- exit、ExitProcess和TerminateProcess 的区别
- 在文件中删除指定的字符串
- oracle sqlldr工具的使用
- 配置Apache虚拟主机
- Ruby源文件指引
- KendoUI Mobile 如何获取远程数据并绑定
- 软件研发核心能力的分析
- Face Value(Amount)