您的位置:首页 > 移动开发 > Android开发

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文件中的代码:
<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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: