Android Handler Demo

主源文件:

package com.example.handlerdemo;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

    private Button mHandlerBtn;
    private Button mUpdateUIBtn;
    private Button mTransDataBtn;
    private Button mRunBtn;
    private Button mPostDelayButton;

    private EditText mEdit;

    private Handler mHandler;
    private Handler mHandlerData;
    private Handler mHandlerrun;
    private Handler mPostDelayHandler;

    private Message msg = new Message();

    private RunThread TestThread;

    private int cnt = 10;

    class RunThread implements Runnable {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                while (true) {
                    //send this message every 1 seconds
                    Thread.sleep(1000);
                    cnt++;
                    Bundle b = new Bundle();
                    b.putLong("cnt", cnt);
                    Message mssg = new Message();
                    mssg.setData(b);
                    mHandlerrun.sendMessage(mssg);
                }

            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    class HandlerRunMessage extends Handler {

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);

            Bundle b = new Bundle();

            b = msg.getData();

            mEdit.setText("number : " +String.valueOf(b.getLong("cnt")));

        }

    }

    class HandlerMessage extends Handler {

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            
            //update ui
            switch (msg.what) {
            case 0:
                mEdit.setText("update ui ...");
                Toast.makeText(MainActivity.this, "update ui",
                        Toast.LENGTH_SHORT).show();
                break;
            case 1:
                Toast.makeText(MainActivity.this, "msg : " + 1,
                        Toast.LENGTH_SHORT).show();
                System.out.println("send message ok ...");
            default:

                break;
            }
            super.handleMessage(msg);
        }

    }

    class HandleDataMessage extends Handler {

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);

            Bundle b = msg.getData();
            mEdit.setText(b.getCharSequence("content"));

        }

    }
    
    class PostDelayHandleMessage extends Handler{

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            
            switch(msg.what){
            case 0:
                Toast.makeText(MainActivity.this, "post delay successfully", Toast.LENGTH_SHORT).show();
                break;
            }
            
        }
        
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        

        mHandler = new HandlerMessage();
        mHandlerData = new HandleDataMessage();
        mHandlerrun = new HandlerRunMessage();
        
        mPostDelayHandler=new PostDelayHandleMessage();
        
        
        mPostDelayButton=(Button)findViewById(R.id.button5);
        mPostDelayButton.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                final Message msg=new Message();
                msg.what=0;
                mPostDelayHandler.postDelayed(new Runnable(){

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        Toast.makeText(MainActivity.this, "under post ...", Toast.LENGTH_SHORT).show();
                        mPostDelayHandler.sendMessage(msg);
                        
                    }
                    
                }, 2000);
            }
            
        });

        mEdit = (EditText) findViewById(R.id.editText1);

        TestThread = new RunThread();

        new Thread(TestThread).start();

        mRunBtn = (Button) findViewById(R.id.button4);
        mRunBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
//                Bundle b = new Bundle();
//                b.putLong("cnt", cnt);
//                mHandlerrun.sendMessage(msg);
            }

        });

        mTransDataBtn = (Button) findViewById(R.id.button3);
        mTransDataBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Bundle bd = new Bundle();
                // bd.putCharSequence("content", "transfer data ok !");
                bd.putString("content", "transfer data OK !");
                msg.setData(bd);
                mHandlerData.sendMessage(msg);
            }

        });

        mUpdateUIBtn = (Button) findViewById(R.id.button2);
        mUpdateUIBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                msg.what = 0;
                mHandler.sendMessage(msg);
            }

        });

        mHandlerBtn = (Button) findViewById(R.id.button1);
        mHandlerBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                new Thread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        msg.what = 1;
                        mHandler.sendMessage(msg);
                    }

                }).start();

            }

        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_marginLeft="66dp"
        android:layout_marginTop="90dp"
        android:layout_toRightOf="@+id/textView1"
        android:text="Button" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/button1"
        android:layout_marginLeft="39dp"
        android:layout_marginTop="69dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText1"
        android:layout_below="@+id/textView1"
        android:layout_marginLeft="14dp"
        android:layout_marginTop="33dp"
        android:text="Button" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText1"
        android:layout_marginTop="58dp"
        android:layout_toRightOf="@+id/textView1"
        android:text="Button" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/button3"
        android:layout_alignParentRight="true"
        android:layout_marginRight="31dp"
        android:text="Button" />

    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button4"
        android:layout_toRightOf="@+id/button3"
        android:text="Button" />

</RelativeLayout>


利用Handler发送数据信息,更新UI,延时处理事务...

 

posted @ 2014-03-16 14:55  MMLoveMeMM  阅读(316)  评论(0编辑  收藏  举报