弱弱的进度条

真的很弱。。。

 

首先就是画界面的甘蕉。。。

一个弱弱的进度条和一个弱弱的start按钮,进度条最初设置为不可见

<ProgressBar
 android:id="@+id/bar"
 style="?android:attr/progressBarStyleHorizontal"
 android:layout_width="200dp"
 android:layout_height="wrap_content"
 android:visibility="gone"
/>

 

activity里,依旧是

1.声明控件变量,一个进度条,一个按钮

2.根据控件得到代表控件的对象

3.为按钮设置监听器

按钮监听的ButtonListener方法

4.继承OnClickListener类,复写onClick方法

  4.1把进度条设置为可见

     bar.setVisibility(View.VISIBLE);

  4.2把线程加入线程队列,立即加入

     updateBarHandler.post(updateThread);

     延迟放入的方法是updateBarHandler.postDelayed(updateThread,3000);

5.线程类,该类使用匿名内部类方式进行声明

两种使用线程的方法

  

 继承Thread类 需要先start方法,然后run方法
 实现Runnable接口 实现run方法

Runnable updateThread = new Runnable(){
     int i = 0;
     //复写 run方法
  @Override
  public void run() {
   // TODO Auto-generated method stub
   System.out.println("Begin Thread" + i);
   i+=10;
   //得到一个消息对象,Message类是由Android操作系统提供的
   Message msg = updateBarHandler.obtainMessage();
   
   //将msg对象的arg1参数的值设置为i,用arg1和arg2这两个成员变量传递消息,优点是系统性能消耗小
   msg.arg1 = i;
   Bundle bundle = new Bundle();
   bundle.putString("testme", "test bundle");
   msg.setData(bundle);
   try{
    //设置当前显示睡眠1秒
    Thread.sleep(1000);
   }
   catch(InterruptedException e){
    e.printStackTrace();
   }
      if(i > 100){
    //如果当i的值大于100时,就将线程对象从handler当中移除
    updateBarHandler.removeCallbacks(updateThread);
   }
   else{

    //将msg对象加入到消息队列中
    updateBarHandler.sendMessage(msg);
   }
  }

6.Handler类,使用匿名内部类来复写Handler当中的handleMessage方法

Handler updateBarHandler = new Handler(){

  @Override
  public void handleMessage(Message msg) {

   //改变进度条显示的进度
   bar.setProgress(msg.arg1);

   //获取bundle中的数据
   Bundle bundle = msg.getData();

   //把进程放入进程队列
   updateBarHandler.post(updateThread);
   System.out.println("test---->" + bundle.getString("testme"));
  }
     
    };

 

一些要说的:

1.实现线程有两种方法,上面表里有。其中继承Thread类的话,线程和Activity会在不同的线程中。而实现Runnable接口的话,线程和Activity会在同一个线程中。

2.Handler消息传递机制,是个异步的东西。

  updateThread用来实现Runnable方法,即产生一个线程

  在updateThread的run方法中,有updateBarHandler.sendMessage(msg);它只负责传递消息,将消息放入消息队列后就结束了。就像去邮局邮信,不会等待信送到。

  updateBarHandler作为Handler的一个子类,继承Handler。

  在其中使用内部类复写了handleMessage方法,这个方法用来处理消息。就像收信。

 

综上,来叙述下执行过程:

点击按钮后,调用监听器的onClick方法,把线程加入线程队列,开始执行,跳到线程部分,执行run方法(执行线程总是执行它的run方法),run方法中sendMessage。而后,Handler部分的handleMessage处理消息,处理过程中,有一步把线程加入线程队列。于是,又跳到线程部分执行run方法,直到run方法中的判断条件不符合,将线程从handler中移除。

 

弱弱的进度条



代码备份

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值