您的位置:首页 > 其它

Handler消息传递机制(二)Message的各种使用

2015-01-30 10:02 309 查看
package com.example.message;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

private Button button;
private Handler handler = new Handler(){
public void handleMessage(Message msg){
int what = msg.what;
int arg1 = msg.arg1;
int arg2 = msg.arg2;
Object obj = msg.obj;
Bundle data = msg.getData();//前四种没有data
System.out.println("what-->>"+what);
System.out.println("arg1-->>"+arg1);
System.out.println("arg2-->>"+arg2);
System.out.println("obj--->>"+obj);
System.out.println("data--->>"+data.getStringArray("str").length);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Thread(new MyThread()).start();
}
});
}

public class MyThread implements Runnable{

@Override
public void run() {
/*
* 用obtain获取一个消息,会从消息池中取出一个消息(消息池不为null),
* 消息池的消息减1。如果消息池为空,则调用new Message新建一个
*/
/*第一种方式
Message message = Message.obtain();
message.what = 1;
message.arg1 = 2;
message.arg2 = 3;
message.obj = "lin";
handler.sendMessage(message);
*/
/*第二种方式
Message message = Message.obtain(handler);
message.what = 1;
message.arg1 = 2;
message.arg2 = 3;
message.obj = "lin";
//把发送对象target置为当前传入的handler,故不能用sendMessage
message.sendToTarget();
*/
/*
* 第三种方式
* 第一个参数:Handler
* 第二个参数:what
Message message = Message.obtain(handler, 66);
message.arg1 = 1;
message.arg2 = 2;
message.obj = "monkey";
message.sendToTarget();
*/
/*第四种方式
* 第一个参数:Handler
* 第二个参数:what
* 第三个参数:arg1
* 第四个参数:arg2
* 第五个参数:obj
Message message = Message.obtain(handler, 1, 2, 3, "Mary");
message.sendToTarget();
*/
/*第五种方式
* 第一个参数:what
* 第二个参数:obj
*/
Message message = Message.obtain(handler, 1, "Rose");
//除此之外还可以用setData传递一些比较复杂的数据,八种数据类型中的数据都可以传递
Bundle data = new Bundle();
data.putStringArray("str", new String[]{"Rose","Jackson"});
message.setData(data);
message.sendToTarget();

}

}
}
<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.example.message.MainActivity" >

<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="24dp"
android:text="发送消息" />

</RelativeLayout>




第三种方式



第四种方式



第五种方式



免积分源代码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐