您的位置:首页 > 移动开发 > Android开发

Android开发之handler(二)

2015-06-22 11:30 609 查看
之前学习了handler的简单用法,如果还不知道handler是什么,可以看一下点击打开链接。这次深入一下,还是一样,先来看一下执行的效果









main.xml

[html] view
plaincopy

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:orientation="vertical"  

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent"  

    >  

<ProgressBar   

    android:id="@+id/bar"  

    android:layout_width="fill_parent"   

    android:layout_height="wrap_content"  

    style="?android:attr/progressBarStyleHorizontal"  

    android:visibility="gone"  

    />  

<Button    

    android:id="@+id/btn"  

    android:layout_width="fill_parent"   

    android:layout_height="wrap_content"   

    android:text="start"  

    />  

</LinearLayout>  

activity类

[java] view
plaincopy

package com.handler;  

  

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;  

import android.widget.Toast;  

  

public class progressHandler extends Activity {  

    /** Called when the activity is first created. */  

    private ProgressBar bar = null;  

    private Button btn = null;  

    @Override  

    public void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.main);  

          

        bar = (ProgressBar)findViewById(R.id.bar);  

        btn = (Button)findViewById(R.id.btn);  

        btn.setOnClickListener(new MyListener());  

    }  

      

    class MyListener implements OnClickListener{  

  

        @Override  

        public void onClick(View arg0) {//第一步,触发button事件,把线程对象updateThread 添加到线程消息队列中  

            // TODO Auto-generated method stub  

            bar.setVisibility(View.VISIBLE);  

            handler.post(updateThread);  

        }  

          

    }  

      

    Handler handler = new Handler(){  

  

        @Override  

        public void handleMessage(Message msg) {//第五步,处理子线程发过来的消息  

            // TODO Auto-generated method stub  

            super.handleMessage(msg);  

            bar.setProgress(msg.arg1);  

            handler.post(updateThread);//继续调用子线程  

        }  

          

    };  

    Runnable updateThread = new Runnable(){  

        int i = 0;  

        @Override  

        public void run() {//第二步,启动线程  

            // TODO Auto-generated method stub  

            System.out.println("begin a thread");  

            i += 10;  

            Message msg = handler.obtainMessage();//第三步,从消息池中返回一个消息  

            msg.arg1 = i;  

            try {  

                Thread.sleep(1000);  

            } catch (InterruptedException e) {  

                // TODO Auto-generated catch block  

                e.printStackTrace();  

            }  

            handler.sendMessage(msg);//第四步,从子线程发送消息给主线程  

   //也可以使用这种方式发送,也是默认发送this.handler 

   //message.sendToTarget();

            if(i==100){//第五步,判断i的值(由于handler是异步处理消息,所以同时会处理子线程发送给主线程的消息)  

                handler.removeCallbacks(updateThread);  

                bar.setVisibility(View.GONE);  

                Toast.makeText(progressHandler.this, "你个SB!", Toast.LENGTH_LONG).show();  

            }  

        }  

          

    };  

}  
                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: