好贷网好贷款

Handler 在线程中处理进度条

发布时间:2016-12-4 14:03:48 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Handler 在线程中处理进度条",主要涉及到Handler 在线程中处理进度条方面的内容,对于Handler 在线程中处理进度条感兴趣的同学可以参考一下。

package com.example.handlermessage; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.annotation.SuppressLint; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; @SuppressLint("HandlerLeak") public class HandlerMessage extends Activity { //定义按钮对象 private Button startbutton = null; //定义进度条对象 private ProgressBar bar = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置布局文件 setContentView(R.layout.handler_activity); //设置按钮id startbutton = (Button)findViewById(R.id.start); //设置进度条id bar = (ProgressBar)findViewById(R.id.bar); //设置按钮文字 startbutton.setText(R.string.start); //设置按钮监听器 startbutton.setOnClickListener(new ButtonListener()); } //点击按钮监听器之后会执行下面代码 class ButtonListener implements OnClickListener { public void onClick(View arg0) { //设置进度条为可见状态 bar.setVisibility(View.VISIBLE); //设置进度条的大小值为200; bar.setMax(200); //使用Handler对象updataBarhandler的post方法把线程对象updataThread传入线程队列中,并开始自动执行updataThread线程 updataBarhandler.post(updateThread); } } Handler updataBarhandler = new Handler() { //消息对象传进来之后会读取消息内容就会执行handlerMessage方法 public void handleMessage(Message msg) { //设置进度条当前的位置,后面的参数为传进来的Message对象msg的变量arg1的值,也就是i + 10, bar.setProgress(msg.arg1); //设置第二进度条的位置 bar.setSecondaryProgress(msg.arg1 + 10); //使用Handler对象updataBarhandler的post方法把线程传入到线程队列当中,并开始执行这个线程 updataBarhandler.post(updateThread); } }; //执行updataThread线程的run方法 Runnable updateThread = new Runnable() { int i = 0; public void run() { System.out.println("Begin Thread"); i = i + 10; //使用Handler对象updataBarhandler调用obtainMessage方法得到一个Message对象,Message为android系统提供的类 Message msg = updataBarhandler.obtainMessage(); //将 i 的值传给msg对象的变量arg1 msg.arg1 = i; try { //线程睡眠 1 秒 Thread.sleep(1000); }catch (InterruptedException e) { e.printStackTrace(); } if (i == bar.getMax()) { //若进度条为最大值设置进度条为不可见状态, bar.setVisibility(View.GONE); return; } //使用Handler对象updataBarhandler的sendMessage方法把消息对象msg传入到消息队列中,传入之后会这时会执行Handler对象的HandlerMessage方法 updataBarhandler.sendMessage(msg); } }; } <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ProgressBar android:id="@+id/bar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="300dp" android:layout_height="wrap_content" android:visibility="gone"/> <Button android:id="@+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> 全部代码 package com.example.handlermessage; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.annotation.SuppressLint; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; @SuppressLint("HandlerLeak") public class HandlerMessage extends Activity { private Button startbutton = null; private ProgressBar bar = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.handler_activity); startbutton = (Button)findViewById(R.id.start); bar = (ProgressBar)findViewById(R.id.bar); startbutton.setText(R.string.start); startbutton.setOnClickListener(new ButtonListener()); } class ButtonListener implements OnClickListener { public void onClick(View arg0) { bar.setVisibility(View.VISIBLE); bar.setMax(200); updataBarhandler.post(updateThread); } } Handler updataBarhandler = new Handler() { public void handleMessage(Message msg) { bar.setProgress(msg.arg1); bar.setSecondaryProgress(msg.arg1 + 10); updataBarhandler.post(updateThread); } }; Runnable updateThread = new Runnable() { int i = 0; public void run() { System.out.println("Begin Thread"); i = i + 10; Message msg = updataBarhandler.obtainMessage(); msg.arg1 = i; try { Thread.sleep(1000); }catch (InterruptedException e) { e.printStackTrace(); } if (i == bar.getMax()) { bar.setVisibility(View.GONE); return; } updataBarhandler.sendMessage(msg); } }; } <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ProgressBar android:id="@+id/bar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="300dp" android:layout_height="wrap_content" android:visibility="gone"/> <Button android:id="@+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>    

上一篇:从零开始,使用Cocos2d HTML5完成一个游戏——第一步
下一篇:优化 SQL Server CPU 性能

相关文章

相关评论