关于Handler的使用,如何使用Handler更新进度条
2012-05-12 21:25
525 查看
二话不说先看看运行效果。
先看一下main.xml
<?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/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="220dp"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始" />
</LinearLayout>
在来看一下java代码
关于进度条的使用的更新方法:
1.首先创建Handler对象
2.创建Handler后调用handler.post(updaterunnable)方法把添加到消息队列中
3.更新进度条当然要用到线程,接下来该创建线程了。
run里的message方法
官方API解释如下:message是定义一个包含任意对象任意数据的对象,这个对象可以发送到Handler中,上面代码中
接着看,在Handler中progressBar.setProgress(msg.arg1);进度条接收了这个参数,i每次自加10,所以进度条每次自动前进10个单位,
要想实现进度条循环前进,所以还要再一次在Handler方法中调用handler.post(updaterunnable);把线程假如到消息队列中,
看程序整理思路,点击Button会触发监听器,监听器会把发线程作为一个对象发送到Handler对象中,(队列是先进先出,犹如汽车过隧道,一定是顺序的进出。)
接下来程序跳转到Thread那,在线程里的run方法里就不用多说了,里面会声称一个msg消息传递给进度条,进度条progressBar会在Handler的匿名内部类里被接受,随后再次调用handler.post(updaterunnable);方法把线程再一次放Handler进队列中,因此能实现循环更新。说的不够相信,希望对大家都有帮助。
有什么不明白的可以关注我的新浪微博哦 欢迎大家一起讨论 http://weibo.com/419768151
先看一下main.xml
<?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/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="220dp"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始" />
</LinearLayout>
在来看一下java代码
package leilei.handler.bar; 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 BarHandlerActivity extends Activity { /** Called when the activity is first created. */ private Button startButton; private ProgressBar progressBar; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); progressBar = (ProgressBar)findViewById(R.id.progressBar1); startButton = (Button)findViewById(R.id.button1); startButton.setOnClickListener(new ButtonListener()); } class ButtonListener implements OnClickListener{ @Override public void onClick(View v) { handler.post(updaterunnable); } } Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { progressBar.setProgress(msg.arg1); handler.post(updaterunnable); } }; Runnable updaterunnable = new Runnable() { int i = 0; @Override public void run() { // TODO Auto-generated method stub System.out.println("start bar"); i = i + 10; Message msg = handler.obtainMessage(); msg.arg1 = i; try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendMessage(msg); if(i == 100){ handler.removeCallbacks(updaterunnable); } } }; }
关于进度条的使用的更新方法:
1.首先创建Handler对象
Handler handler = new Handler
2.创建Handler后调用handler.post(updaterunnable)方法把添加到消息队列中
3.更新进度条当然要用到线程,接下来该创建线程了。
Runnable updaterunnable = new Runnable()线程里run方法里就是我们要更新的具体实现了。
run里的message方法
官方API解释如下:message是定义一个包含任意对象任意数据的对象,这个对象可以发送到Handler中,上面代码中
handler.sendMessage(msg);把msg 作为参数发送出去,那么发送出的是数据被谁接收呢?
接着看,在Handler中progressBar.setProgress(msg.arg1);进度条接收了这个参数,i每次自加10,所以进度条每次自动前进10个单位,
要想实现进度条循环前进,所以还要再一次在Handler方法中调用handler.post(updaterunnable);把线程假如到消息队列中,
看程序整理思路,点击Button会触发监听器,监听器会把发线程作为一个对象发送到Handler对象中,(队列是先进先出,犹如汽车过隧道,一定是顺序的进出。)
接下来程序跳转到Thread那,在线程里的run方法里就不用多说了,里面会声称一个msg消息传递给进度条,进度条progressBar会在Handler的匿名内部类里被接受,随后再次调用handler.post(updaterunnable);方法把线程再一次放Handler进队列中,因此能实现循环更新。说的不够相信,希望对大家都有帮助。
有什么不明白的可以关注我的新浪微博哦 欢迎大家一起讨论 http://weibo.com/419768151
相关文章推荐
- 关于Thread -----使用线程更新进度组件
- ASP.Net下如何解决关于Access数据库“操作必须使用一个可更新的查询”问题
- 关于路由协议rip中如何使用passvice-interface的限制路由更新
- 如何使用通知进行更新进度条
- 关于MySQL密码生成策略使用的注意事项(定期更新)
- Android异步更新UI的方式之使用Handler的post(Runnabel r)方法
- 分享:关于如何使用反编译器,获取源码清单方法
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题
- 关于如何使用SqlServer中@@Identity、@@IDENT_CURRENT、@@SCOPE_Identity获取自动生成列的值的区别(精简版)
- 关于android4.0中访问网络不能在主线程中进行以及Handler的使用
- Android多线程中使用Handler更新ListView控件数据
- 如何使用 C# 爬虫获得专栏博客更新排行
- 如何利用Handler更新android的UI
- 关于VS2015 如何使用内置IIS调试WEB应用程序
- 关于JQUERY的DataTable插件的使用过程笔记【持续更新中……】
- 关于Handler 使用This Handler class should be static or leaks might occur 警告处理
- 关于如何在不使用虚函数的情况下父类调用子类成员函数的问题
- 关于如何使用cookie 记住用户名和密码
- 关于使用dataAdapter.acceptChanges( )方法更新dataSet和数据库的问题
- 关于Endnote、Mathtype、Word使用技巧相关链接(不定期更新)