Android编程学习之Message处理Handler

Android编程学习之Message处理Handler

  • 1.实例化Handler对象,并重写void handleMessage(Message msg)方法:
Handler handler = new Handler()
{
    @Override
    public void handleMessage(Message msg)
    {
        // TODO Auto-generated method stub
        super.handleMessage(msg);
        if(msg.what==1)
        {
            byte[] data  = (byte[]) msg.obj;
            Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
            imageView.setImageBitmap(bm);
        }
    }
};
  • 2.在程序中定义并发送Message
Message message = handler.obtainMessage();
message.arg1=1;
message.arg2=2;
message.obj=data;
message.what=1;
handler.sendMessage(message);

也可以使用如下方法延迟10ms发送:

handler.sendMessageDelayed(handler.obtainMessage(int what,Object obj), 10);

  • 例子1 android_handler_downloadimage MainActivity.java:
package com.example.android_handler_downloadimage;

import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity
{
    private Button button;
    private ImageView imageView;
    private ProgressDialog dialog;
    private int IS_COMPLETE = 0;
    private static final String PATH = "http://10.0.2.2:8080/MyFirstWeb/mm.jpeg";
    Handler handler = new Handler()
    {

        @Override
        public void handleMessage(Message msg)
        {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            if (msg.what == 1)
            {
                byte[] data = (byte[]) msg.obj;
                Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
                imageView.setImageBitmap(bm);
                if (IS_COMPLETE == 1)
                {
                    dialog.dismiss();
                }
            }
        }

    };

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

        imageView = (ImageView) this.findViewById(R.id.imageView1);

        dialog = new ProgressDialog(this);
        dialog.setTitle("提示");
        dialog.setMessage("Loading...");

        button = (Button) this.findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View arg0)
            {
                // TODO Auto-generated method stub
                dialog.show();
                new Thread(new MyThread()).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.activity_main, menu);
        return true;
    }

    class MyThread implements Runnable
    {

        @Override
        public void run()
        {
            // TODO Auto-generated method stub
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(PATH);

            try
            {
                HttpResponse response = httpClient.execute(httpPost);
                if (response.getStatusLine().getStatusCode() == 200)
                {
                    byte[] data = EntityUtils.toByteArray(response.getEntity());
                    Message message = handler.obtainMessage();
                    message.arg1 = 1;
                    message.arg2 = 2;
                    message.obj = data;
                    message.what = 1;
                    handler.sendMessage(message);
                    IS_COMPLETE = 1;
                }
            }
            catch (ClientProtocolException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally
            {
                httpClient.getConnectionManager().shutdown();
            }
        }
    }

}
  • 例子2 android_handler_textview MainActivity.java:
package com.example.android_handler_textview;

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.TextView;

public class MainActivity extends Activity
{
    private Button button;
    private TextView textView;
    private MyHandler handler;

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

        handler = new MyHandler();
        textView = (TextView) this.findViewById(R.id.textView1);
        button = (Button) this.findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View arg0)
            {
                // TODO Auto-generated method stub
                new Thread(new MyThread()).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.activity_main, menu);
        return true;
    }

    class MyHandler extends Handler
    {

        @Override
        public void handleMessage(Message msg)
        {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            textView.append((String) msg.obj + msg.arg1);
        }

    }

    class MyThread implements Runnable
    {

        @Override
        public void run()
        {
            // TODO Auto-generated method stub
            int i = 1;
            while (i <= 20)
            {
                try
                {
                    Thread.sleep(500);
                }
                catch (InterruptedException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Message message = handler.obtainMessage();
                message.arg1 = i;
                message.obj = "Tom";
                i++;
                handler.sendMessage(message);
            }
        }
    }

}
  • 例子3 android_handler_progressdialog MainActivity.java:
package com.example.android_handler_progressdialog;

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

public class MainActivity extends Activity
{

    private Button button;
    private ProgressDialog dialog;
    private MyHandler handler;

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

        handler = new MyHandler();

        dialog = new ProgressDialog(this);
        dialog.setTitle("下载进度");
        dialog.setMessage("Loading...");
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

        button = (Button) this.findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View arg0)
            {
                // TODO Auto-generated method stub
                dialog.show();
                new Thread(new MyThread()).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.activity_main, menu);
        return true;
    }

    class MyHandler extends Handler
    {

        @Override
        public void handleMessage(Message msg)
        {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            dialog.setProgress(msg.arg1);
            dialog.setSecondaryProgress(msg.arg2);
            if (msg.what == 1)
            {
                dialog.dismiss();
            }
        }

    }

    class MyThread implements Runnable
    {

        @Override
        public void run()
        {
            // TODO Auto-generated method stub
            int i = 0;
            int k = 0;
            while (i <= 100)
            {
                try
                {
                    Thread.sleep(50);
                }
                catch (InterruptedException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Message message = handler.obtainMessage();
                message.arg1 = i;
                message.arg2 = k + 10;
                if (i == 100)
                {
                    message.what = 1;
                }
                handler.sendMessage(message);
                i++;
                k++;
            }
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值