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来发送消息。当主线程的接收消息收到信息后,进行处理,这就相当于在主线程中处理了。也就完成了子线程对主线程的改变。
分享到:
相关推荐
android安全机制文档
Android网路编程代码 设计客户端和服务器端通信 适合初学者学习 当然其中包括很多其他知识点 例如基于handler的主副线程通信机制 多线程应用等 另外 对于Android入门的学习者 也是一手极好的学习资料 下载即可运行 ...
第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 4游戏编程入门经典》囊括了成为一名成功的Android游戏开发者所需的全 部知识。本书是一本可以信赖的指南,能够帮助你在移动游戏开发中迅速“升级”。学完 本书并加以融会贯通,就能够编写出成功的Android...
Android 异步消息处理机制完全解析,带你从源码角度彻底理解 Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系 Android消息循环分析 Android Activity developer 官网 (强烈推荐 ...
android游戏编程入门 《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1 1.1 Android简介 1 1.2 版本分裂 3 ...
整理网上的资料以及自己的经验,整理出来的···入门了解很不错的材料···
Camera、地图、GPS、传感器、录音、WiFi设备等,OpenGL ES的应用,着色和3D图形的绘制和纹理贴图,Android NDK和Android网络编程,Android进程间通信机制Binder原理等,通过一个完整项目的开发,帮助读者把所学的...
Android 活动 Android UI 界面开发 手机平板兼顾 详解广播机制 数据储存持久化技术 内容提供器 手机多媒体 探究服务 网络技术 位置开发 Android 传感器 Android 高级进阶技巧 Android 实战 发布运用
Camera、地图、GPS、传感器、录音、WiFi设备等,OpenGL ES的应用,着色和3D图形的绘制和纹理贴图,Android NDK和Android网络编程,Android进程间通信机制Binder原理等,通过一个完整项目的开发,帮助读者把所学的...
《android4游戏编程入门经典》囊括了成为一名成功的android游戏开发者所需的全部知识。本书是一本可以信赖的指南,能够帮助你在移动游戏开发中迅速“升级”。学完本书并加以融会贯通,就能够编写出成功的android...
《Android平台开发之旅(第2版)》内容涵盖了Android主流平台主要的功能特性,对平台的底层机制进行了系统而全面的剖析,对主流的技术及应用模式进行完整介绍;其间还使用通俗易懂的比喻帮助读者理解概念;通过联想...
Android 活动 Android UI 界面开发 手机平板兼顾 详解广播机制 数据储存持久化技术 内容提供器 手机多媒体 探究服务 网络技术 位置开发 Android 传感器 Android 高级进阶技巧 Android 实战 发布运用
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的匿名共享内存机制是在内核实现的,也是基于Linux内核本身的共享内存机制,作了一层封装。Android提供了匿名共享内存的C运行库访问接口(但NDK不能使用),Java层也有访问接口,就是MemoryFile.java,通过...
Android内部机制的快速入门,包括Linux内核和Dalvik虚拟机。在没有硬件的情况下,通过模拟器镜像来开始学习和探索Android。了解Android的无递归的构建系统,以及学习怎样来做你自定义的修改。使用评估板来构建你的...
Camera、地图、GPS、传感器、录音、WiFi设备等,OpenGL ES的应用,着色和3D图形的绘制和纹理贴图,Android NDK和Android网络编程,Android进程间通信机制Binder原理等,通过一个完整项目的开发,帮助读者把所学的...
Camera、地图、GPS、传感器、录音、WiFi设备等,OpenGL ES的应用,着色和3D图形的绘制和纹理贴图,Android NDK和Android网络编程,Android进程间通信机制Binder原理等,通过一个完整项目的开发,帮助读者把所学的...