Handler(一)--MarsChen Android 开发教程学习笔记
2014-09-03 11:18
281 查看
什么是Handler Handler 是一个处理器,与Looper 和MessageQueue 是Android 当中最重要的消息传递以及消息处理机制。Handler、Looper 和MessageQueue 的基本原理
图上方的蓝色区域是一个队列,队列当中存放数据。Handler 负责往消息队列放消息,Looper 负责从队列另一头取消息,如果消息队列没有消息,Looper 会处于等待状态。Looper 取出的消息对象再交给Handler 处理。一个简单的Handler 例子 创建一个继承自android.os.Handler 的类,复写handleMessage 方法。 在onClick 方法中调用handler 的obtainMessage 方法,生成了Message 对象,消息对象调用what 方法给消息对象赋值,再将消息对象放入Handler 的sendMessage 方法中,此方法将消息放入消息队列传输。 此时Looper 会将消息队列将消息对象取出,然后找到与消息对象对应的Handler 对象(每一个消息对象都会有一个与之对应的Handler 对象),调用Handler 对象的handleMessage 方法,将消息对象传入该方法处理。在XML文件中的代码:
在JAVA 文件中的代码:
图上方的蓝色区域是一个队列,队列当中存放数据。Handler 负责往消息队列放消息,Looper 负责从队列另一头取消息,如果消息队列没有消息,Looper 会处于等待状态。Looper 取出的消息对象再交给Handler 处理。一个简单的Handler 例子 创建一个继承自android.os.Handler 的类,复写handleMessage 方法。 在onClick 方法中调用handler 的obtainMessage 方法,生成了Message 对象,消息对象调用what 方法给消息对象赋值,再将消息对象放入Handler 的sendMessage 方法中,此方法将消息放入消息队列传输。 此时Looper 会将消息队列将消息对象取出,然后找到与消息对象对应的Handler 对象(每一个消息对象都会有一个与之对应的Handler 对象),调用Handler 对象的handleMessage 方法,将消息对象传入该方法处理。在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="com.shumin.lbs08.MainActivity" > <Button android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="BUTTON"/> </RelativeLayout>
在JAVA 文件中的代码:
package com.shumin.lbs08; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends ActionBarActivity { private Button button; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button)findViewById(R.id.button); ButtonListener listener=new ButtonListener(); button.setOnClickListener(listener); handler=new FirstHandler(); } class ButtonListener implements OnClickListener{ @Override public void onClick(View v) { Message msg=handler.obtainMessage(); msg.what=44; handler.sendMessage(msg); } } class FirstHandler extends Handler{ @Override public void handleMessage(Message msg) { System.out.println("消息是:"+(int)msg.what); } } @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; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
相关文章推荐
- Handler(二下)--MarsChen Android 开发教程学习笔记
- 单选按钮(作业)--MarsChen Android 开发教程学习笔记
- 文件下载 -- MarsChen Android 开发教程学习笔记
- Android 当中的线程-- MarsChen Android 开发教程学习笔记
- Handelr(二上)-- MarsChen Android 开发教程学习笔记
- Animation 的Interpolator -- MarsChen Android 开发教程学习笔记
- 时间与日期--MarsChen Android 开发教程学习笔记
- Activity 生命周期(二)-- MarsChen Android 开发教程学习笔记
- SeekBar 和RatingBar --MarsChen Android 开发教程学习笔记
- Service 初步 -- MarsChen Android 开发教程学习笔记
- 广播机制 -- MarsChen Android 开发教程学习笔记
- SQLite 使用方法 -- MarsChen Android 开发教程学习笔记
- 相对布局(作业)-- MarsChen Android 开发教程学习笔记
- Animations(通过Java 代码控制) -- MarsChen Android 开发教程学习笔记
- Spinner -- MarsChen Android 开发教程学习笔记
- 程序调试 -- MarsChen Android 开发教程学习笔记
- Activity 生命周期(一)-- MarsChen Android 开发教程学习笔记
- App Widget -- MarsChen Android 开发教程学习笔记
- WiFi 网络操作(一)-- MarsChen Android 开发教程学习笔记
- XML 文件解析 -- MarsChen Android 开发教程学习笔记