安卓Handler消息机制
来源:互联网 发布:知乎匿名回答怎么设置 编辑:程序博客网 时间:2024/05/21 10:34
安卓Handler主要有两个作用
1.在新启动的线程中发送消息
2.在中线程中获取处理消息
在Android平台中,新启动的线程是无法访问Activity里的Widget的,当然也不能将运行状态外送出来,这就需要有Handler机制进行消息的传递了,Handler类位于android.os包下,主要的功能是完成Activity的Widget与应用程序中线程之间的交互。接下来对该类中常用的方法进行介绍,如表7-1所示。
表7-1 Handler类的常用方法
方法签名
描 述
public void handleMessage (Message msg)
子类对象通过该方法接收信息
public final boolean sendEmptyMessage (int what)
发送一个只含有what值的消息
public final boolean sendMessage (Message msg)
发送消息到Handler,
通过handleMessage方法接收
public final boolean hasMessages (int what)
监测消息队列中是否还
有what值的消息
public final boolean post (Runnable r)
将一个线程添加到消息队列
将一个线程添加到消息队列
开发带有Handler类的程序步骤如下。
在Activity或Activity的Widget中开发Handler类的对象,并重写handleMessage方法。
在新启动的线程中调用sendEmptyMessage或者sendMessage方法向Handler发送消息。
Handler类的对象用handleMessage方法接收消息,然后根据消息的不同执行不同的操作。
下面看一个周期性的改变显示图片的例子
main.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" >
<ImageView
android:id="@+id/show"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
Activity里面的内容
package com.example.handletest;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.ImageView;
public class MainActivity extends Activity {
//定义周期性显示的图片的ID
int[] imageIds = new int[]
{
R.drawable.image1,
R.drawable.image2,
R.drawable.image3,
R.drawable.image4,
R.drawable.image5
};
int currentImageId = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView show = (ImageView)findViewById(R.id.show);
final Handler myHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
//如果该消息是本程序所发送的
if (msg.what == 0x1222)
{
//动态地修改所显示的图片
show.setImageResource(imageIds[currentImageId++]);
if (currentImageId >= 4)
{
currentImageId = 0;
}
}
}
};
//定义一个计时器,让该计时器周期性地执行指定任务
new Timer().schedule(new TimerTask()
{
@Override
public void run()
{
//新启动的线程无法访问该Activity里的组件
//所以需要通过Handler发送信息
Message msg = new Message();
msg.what = 0x1222;
//发送消息
myHandler.sendMessage(msg);
}
}, 0 , 2*1000);
}
@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;
}
}
- 安卓Handler消息机制
- 安卓handler消息处理机制
- 安卓Handler消息机制的例子
- 安卓基础:Handler消息传送机制
- 《安卓笔记》Handler消息机制
- 安卓中的handler消息传递机制
- 安卓Handler,Looper消息传递机制
- 安卓handler消息机制源码解析
- 安卓开发中Handler消息传递机制
- 安卓开发:Handler异步消息处理机制使用
- 安卓中的消息循环机制Handler及Looper详解
- 安卓消息处理机制(Looper,Handler,Message)
- 安卓Handler机制
- 安卓消息机制
- 安卓之handler机制
- 【安卓开发艺术探索】第10章 消息机制Handler 笔记
- 12.安卓Handler处理消息
- 安卓中的消息机制
- hdu1213 How Many Tables
- 【数据结构之排序8】归并排序
- 在android 2.2 上开发GC双模手机的考虑---RIL电话管理的设计
- Building iOS Apps for Enterprise Deployment
- ffmpeg开发中出现的问题(五)
- 安卓Handler消息机制
- 什么是cocos2d-x里所说的“刚体”
- SSH 调试信息--仅作自己使用
- 电子研发联盟-红外调光灯设计
- 每天写一点代码----连续子数组乘积最大
- all to solve
- tomcat6.0 配置多个项目(网站)用域名可以直接访问
- 20131022 android 使用虚拟机安装apk(Dexter_lin_007)
- android 系统上做GC双模的--modem 的被动消息处理