Handler(一)--MarsChen Android 开发教程学习笔记

来源:互联网 发布:台达plc编程教学 编辑:程序博客网 时间:2024/05/18 15:29
什么是Handler
Handler 是一个处理器,与Looper 和MessageQueue 是Android 当中最重要的消息传递以及消息处理机制。
Handler、Looper 和MessageQueue 的基本原理
Handler(一)--MarsChen Android 教程学习笔记 - Roller44 - 病友说
 
图上方的蓝色区域是一个队列,队列当中存放数据。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);
}
}



0 0
原创粉丝点击