Android Handler之Message传递参数

最近发现Message,发送消息可以传递参数,这个思路很好,所以写了一个例子,点击屏幕,给Activity发送一个消息,传递两个参数,并把这个activity销毁掉!

程序打开界面:

点击屏幕,销毁activity弹出Toast:

MainActivity

    package com.cn.Android;  

    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.widget.Toast;  

    public class MainActivity extends Activity {  

        final static int CANSHU = 1;  

        public Handler mHandler=new Handler(){
            public void handleMessage(Message msg) {
            switch(msg.what){
                case CANSHU :   String str1 = msg.getData().getString("text1");//接受msg传递过来的参数
                        String str2 = msg.getData().getString("text2");//接受msg传递过来的参数
                        initFinishMainActivity(str1, str2);
                        break;
                    default: break;
                }
            }
        };  

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            InitMainActivity();
        }  

        public void InitMainActivity()
        {
            setContentView(new MainActivityView(this,this));
        }  

        public void initFinishMainActivity(String str1, String str2)
        {
            Toast.makeText(MainActivity.this, str1+str2, Toast.LENGTH_LONG).show();
            finish();
        }
    }  

MainActivityView

    package com.cn.android;  

    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Rect;
    import android.os.Bundle;
    import android.os.Message;
    import android.view.MotionEvent;
    import android.view.View;  

    public class MainActivityView extends View{  

        private MainActivity activity;
        private Context context;
        private Bitmap m_Bitmap;  

        public MainActivityView(Context context, MainActivity activity) {
            super(context);
            this.activity = activity;
            this.context = context;
            initBitmap();
        }  

        public void initBitmap()
        {
            m_Bitmap = BitmapFactory.decodeResource(this.getResources(),R.drawable.bg);
        }  

        @Override
        public void onDraw(Canvas canvas) {
            canvas.drawBitmap(m_Bitmap, 0, 0, null);  

        }  

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            int x = (int) event.getX();
            int y = (int) event.getY();
            Rect rect;
            rect = new Rect(0,0,320,480);  

            if(rect.contains(x,y))
            {
                Message msg = new Message();
                msg.what = MainActivity.CANSHU;
                Bundle bundle = new Bundle();
                          bundle.putString("text1","大明的消息传递参数的例子!");  //往Bundle中存放数据
                             bundle.putString("text2","Time:2011-09-05");  //往Bundle中put数据
                             msg.setData(bundle);//mes利用Bundle传递数据
                             activity.mHandler.sendMessage(msg);//用activity中的handler发送消息
            }  

            return super.onTouchEvent(event);
        }  

    }  
时间: 2024-10-04 10:43:15

Android Handler之Message传递参数的相关文章

转载《Android Handler、Message》

之前也是由于周末通宵看TI3比赛,一直没找到时间写博客,导致已经有好久没更新了.惭愧!后面还会恢复进度,尽量保证每周都写吧.这里也是先恭喜一下来自瑞典的Alliance战队夺得了TI3的冠军,希望明年中国战队能够虎起! 开始进入正题,我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃.相信大家在日常的工作当中都会经常遇到这个问题,解决的方案应该也是早已烂熟于心,即创建一个Message对象,然后借助Handler发送出去,之后在Handler的ha

Android开发之Fragment传递参数的几种方法

Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持.Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式来传递参数,而不推荐通过构造方法直接来传递参数呢?为了弄清这个问题,我们可以做一个测试,分别测试下这两种方式的不同 首先,我们来测试下通过构造方法传递参数的情况 public class FramentT

android fragement之间互相传递参数

在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种是通过共同的Activity传递.这种方法是在Activity里面添加一个字段.来临时保存要一些值. 其实我开始想的是用SharedPreferences,不过想想太麻烦! 然后翻了一下Fragment的API.找到了另外一个方法来传递.就像Activity一样便捷的实现参数传递程序中的一段代码.是

Android/iOS访问wcf传递参数为实体对象的问题

简单记录一下使用实体对象作为参数的传递! 在服务端使用webservice时是没有问题的,但是当替换成wcf时就出现传递的参数无法序列化的问题! 服务端代码: Service1.svc namespace WcfTeacherService { // 注意: 使用"重构"菜单上的"重命名"命令,可以同时更改代码.svc 和配置文件中的类名"Service1". // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择

Android Handler使用Message的一个注意事项

最近发现了一个莫名其妙的问题,在使用Handler.post(Runnable)这个接口时,Runnable有时候没有运行,非常奇怪,后来发现是因为调用Handler.removeMessage()时,what参数传的0,导致Runnable所在的Message被remove了,下面看下源码. 1 class MyHandler extends Handler { 2 @Override 3 public void handleMessage(Message msg) { 4 switch (m

Android Handler Message总结

当应用程序启动时,会开启一个主线程(也就是UI线程),由她来管理UI,监听用户点击,来响应用户并分发事件等.所以一般在主线程中不要执行比较耗时的操作,如联网下载数据等,否则出现ANR错误.所以就将这些操作放在子线程中,但是由于AndroidUI线程是不安全的,所以只能在主线程中更新UI.Handler就是用来 子线程和创建Handler的线程进行通信的. Handler的使用分为两部分:  一部分是创建Handler实例,重载handleMessage方法,来处理消息. [java] view

Android开发学习之路--异步消息Handler,Message,Looper和AsyncTask之初体验

在简易音乐播放器中,用了Handler,也没有过多地去研究学习,这里再学习下android下的异步消息处理机制.这里用了Handler主要是在线程中不能更新UI,而需要通过Handler才可以.关于异步消息处理有几个概念. 1.Message:消息,线程间通讯的数据单元.例如后台要下载歌曲然后下载完成要更新ui,则可以发送一条包含更新信息的Message给UI线程. 2.MessageQueue:消息队列,用来存放所有通过Handler发布的消息,因为是队列,所以是先进先出的. 3.Handle

Android 消息机制 (Handler、Message、Looper)

综合:http://blog.csdn.net/dadoneo/article/details/7667726 与 http://android.tgbus.com/Android/androidnews/201204/421642.shtml 一. 消息机制常用类的介绍和使用 在Android程序运行中,线程之间或者线程内部进行信息交互时经常会使用到消息,如果我们熟悉这些基础的东西及其内部的原理,将会使我们的Android开发变的容易.可以更好地架构系统.在学习Android消息机制之前,我们

Android的Handler Looper Message机制应用实例与详解(二)

上一篇博文给出了Android中基于Handler Looper机制实现线程间通信的两个典型实例.本文将对该机制的基本原理进行较深入的研究.个人认为,学好Android编程最好的老师就是Android的源代码,下面将基于Android-19的源码进行分析,重点阐述分析思路. 要分析Handler Looper机制,自然想到去看Handler类和Looper类的源码(分别位于Handler.java和Looper.java两个文件中).简单阅读两个类的描述后,在Looper类的描述中能找到以下一段