`
158067568
  • 浏览: 327014 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android消息机制入门一

阅读更多

Android消息机制入门一

为什么要引入消息机制?

为什么要引入消息机制,首先举一个简单的例子,我们来说明:

package cn.edu.heut.zcl;
 
import java.util.Timer; 
import java.util.TimerTask; 
import android.app.Activity; 
import android.os.Bundle; 
 
public class Activity1 extends Activity { 
   
    private int t = 0; 
     
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        Timer timer = new Timer(); 
        timer.scheduleAtFixedRate(new MyTask(), 1, 5000); 
    } 
    private class MyTask extends TimerTask{ 
        @Override 
        public void run() { 
              Activity1.this.updateTitle();
        }    
    } 
    public void updateTitle(){ 
         
        setTitle("title:" + t); 
        t ++; 
    } 
}
 

我相信,看完代码之后,稍微有编程经验的朋友都会明白,这段代码是每隔一段时间该改变应用程序的标题的。但是你可以运行一下试试,他是绝对不会有任何反应的,这是为什么呢?

主线程与子线程

原来,在Android应用程序启动的时候,就会启动一个主线程(即UI线程)。但有时需要进行一些耗时运算,如果这些运算都放在主线程中,那么我们知道主线程就会阻塞,这样将会造成不好的用户响应。

这时一般采取的策略就是开辟一个新的线程,但是如果在新的线程里面写了处理主线程的代码,那么就会出现上面的例子的情况,什么都不会发生,甚至报错。

其实原因很简单,在设计Android时处于安全考虑,子线程是无法修改主线程的显示的代码的。这是问题接踵而来,怎么在子线程中修改主线程的显示呢?这是应该使用Android提供的消息机制。在这里我先给出一个简单的例子,该例子是我看到一位牛人写的之后进行修改,更适合本文,代码如下:

package cn.edu.heut.zcl;
 
import java.util.Timer; 
import java.util.TimerTask; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Message;
 
 
import android.os.Handler; 
 
public class Activity1 extends Activity {  
   
    private int t = 0; 
     
    private Handler mHandler = new Handler(){
 
                   @Override
                   public void handleMessage(Message msg) {
                            super.handleMessage(msg);
                            switch(msg.what){
                            case 1:
                                     updateTitle();
                                     break;
                            }
                   }
    };
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);
         
        Timer timer = new Timer(); 
        timer.scheduleAtFixedRate(new MyTask(), 1, 5000); 
    } 
    private class MyTask extends TimerTask{ 
        @Override 
        public void run() { 
//              Activity1.this.updateTitle();
            Message message = new Message(); 
            message.what = 1; 
            mHandler.sendMessage(message); 
        }    
    } 
    public void updateTitle(){ 
         
        setTitle("title:" + t); 
        t ++; 
    } 
}
 

该例子是对上一个例子的修改,在主线程中声明了Handler对象,该对象用来接收并且处理收到的handlerMessage消息。在子线程中声明一个Message对象,并且为这个Message对象附上信息。通过Handler来发送消息。当主线程的接收消息收到信息后,进行处理,这就相当于在主线程中处理了。也就完成了子线程对主线程的改变。

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    android安全机制文档

    android安全机制文档

    Android网络编程 非常适合入门

    Android网路编程代码 设计客户端和服务器端通信 适合初学者学习 当然其中包括很多其他知识点 例如基于handler的主副线程通信机制 多线程应用等 另外 对于Android入门的学习者 也是一手极好的学习资料 下载即可运行 ...

    Android 4游戏编程入门经典

    第1章 android,后起之秀  1.1 android简介  1.2 版本分裂  1.3 谷歌的角色  1.3.1 android开源项目  1.3.2 android market  1.3.3 挑战赛、设备播种计划和谷歌i/o  1.4 android的功能和体系结构  1.4.1 ...

    android 线程入门教程

    android的入门线程教程,很适合新手,用于了解android的线程机制。

    《Android.4.游戏入门经典.第3版》PDF

    《Android 4游戏编程入门经典》囊括了成为一名成功的Android游戏开发者所需的全 部知识。本书是一本可以信赖的指南,能够帮助你在移动游戏开发中迅速“升级”。学完 本书并加以融会贯通,就能够编写出成功的Android...

    Android代码-Android 一些重要知识点解析整理

    Android 异步消息处理机制完全解析,带你从源码角度彻底理解 Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系 Android消息循环分析 Android Activity developer 官网 (强烈推荐 ...

    android游戏编程入门

    android游戏编程入门 《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1  1.1 Android简介 1  1.2 版本分裂 3 ...

    Android消息处理机制

    整理网上的资料以及自己的经验,整理出来的···入门了解很不错的材料···

    Android应用开发从入门到精通 android studio code 1-10章

     Camera、地图、GPS、传感器、录音、WiFi设备等,OpenGL ES的应用,着色和3D图形的绘制和纹理贴图,Android NDK和Android网络编程,Android进程间通信机制Binder原理等,通过一个完整项目的开发,帮助读者把所学的...

    安卓(Android)从入门到精通_电脑版

    Android 活动 Android UI 界面开发 手机平板兼顾 详解广播机制 数据储存持久化技术 内容提供器 手机多媒体 探究服务 网络技术 位置开发 Android 传感器 Android 高级进阶技巧 Android 实战 发布运用

    Android应用开发从入门到精通 android studio code 11-17章

     Camera、地图、GPS、传感器、录音、WiFi设备等,OpenGL ES的应用,着色和3D图形的绘制和纹理贴图,Android NDK和Android网络编程,Android进程间通信机制Binder原理等,通过一个完整项目的开发,帮助读者把所学的...

    Android 4 游戏编程入门经典(英文完整版)

     《android4游戏编程入门经典》囊括了成为一名成功的android游戏开发者所需的全部知识。本书是一本可以信赖的指南,能够帮助你在移动游戏开发中迅速“升级”。学完本书并加以融会贯通,就能够编写出成功的android...

    Android移动应用开发从入门到精通

    《Android平台开发之旅(第2版)》内容涵盖了Android主流平台主要的功能特性,对平台的底层机制进行了系统而全面的剖析,对主流的技术及应用模式进行完整介绍;其间还使用通俗易懂的比喻帮助读者理解概念;通过联想...

    安卓(Android)从入门到精通_手机版

    Android 活动 Android UI 界面开发 手机平板兼顾 详解广播机制 数据储存持久化技术 内容提供器 手机多媒体 探究服务 网络技术 位置开发 Android 传感器 Android 高级进阶技巧 Android 实战 发布运用

    零基础入门Android(安卓)逆向-rar

    32.Android源码定制添加反反调试机制 ' v/ q6 K1 {6 ] 33.Android dvm 脱壳2 34.Android dvm 脱壳3 H2 X- A# M4 s+ A6 K- b 35.Dalvik dex处理分析 ) x+ l1 l1 J R2 N) T" R) ^2 o 36.IDA脱壳脚本编写1) O7 `% E" Q...

    Android代码-Android

    Android的匿名共享内存机制是在内核实现的,也是基于Linux内核本身的共享内存机制,作了一层封装。Android提供了匿名共享内存的C运行库访问接口(但NDK不能使用),Java层也有访问接口,就是MemoryFile.java,通过...

    构建嵌入式android系统

    Android内部机制的快速入门,包括Linux内核和Dalvik虚拟机。在没有硬件的情况下,通过模拟器镜像来开始学习和探索Android。了解Android的无递归的构建系统,以及学习怎样来做你自定义的修改。使用评估板来构建你的...

    Android应用开发从入门到精通 code 1-12章

     Camera、地图、GPS、传感器、录音、WiFi设备等,OpenGL ES的应用,着色和3D图形的绘制和纹理贴图,Android NDK和Android网络编程,Android进程间通信机制Binder原理等,通过一个完整项目的开发,帮助读者把所学的...

    Android应用开发从入门到精通样章

     Camera、地图、GPS、传感器、录音、WiFi设备等,OpenGL ES的应用,着色和3D图形的绘制和纹理贴图,Android NDK和Android网络编程,Android进程间通信机制Binder原理等,通过一个完整项目的开发,帮助读者把所学的...

Global site tag (gtag.js) - Google Analytics