最近在做项目的时候,遇到要在新线程向UI线程传送一个对象,自己试试了下面方法。
还是直接贴代码:
XML文件
-
<LinearLayout xmlns:android=""
-
xmlns:tools=""
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
android:orientation="vertical">
-
-
<TextView android:id="@+id/textview"
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
android:text="hello_world" />
-
-
-
</LinearLayout>
User.java
-
package com.example.handlerdemo;
-
-
import java.io.Serializable;
-
-
public class User implements Serializable{
-
private String name;
-
private int age;
-
-
public User(){}
-
-
public User(String name, int age){
-
this.name = name;
-
this.age = age;
-
}
-
-
public String getName(){
-
return this.name;
-
}
-
public int getAge(){
-
return this.age;
-
}
-
}
MainActivity.java
-
package com.example.handlerdemo;
-
-
import android.os.Bundle;
-
import android.os.Handler;
-
import android.os.Message;
-
import android.app.Activity;
-
import android.widget.TextView;
-
-
public class MainActivity extends Activity {
-
-
public Handler mHandler;
-
MyHandler myhandler;
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
myhandler = new MyHandler();
-
-
myhandler.start();
-
-
mHandler = new Handler(){
-
@Override
-
public void handleMessage(Message msg){
-
if(msg.what == 0x123){
-
TextView textview = (TextView) findViewById(R.id.textview);
-
System.out.println("handlerMessage");
-
User user = (User) msg.getData().getSerializable("USER");
-
textview.setText("name:" + user.getName() + " age:" + user.getAge());
-
}
-
}
-
};
-
}
-
-
class MyHandler extends Thread{
-
-
public void run(){
-
User user = new User("haha", 12);
-
Message msg = new Message();
-
msg.what = 0x123;
-
Bundle b = new Bundle();
-
b.putSerializable("USER", user);
-
msg.setData(b);
-
mHandler.sendMessage(msg);
-
-
}
-
}
-
-
}
主要注意的是User类要实现Serializable接口。
Serializable和Parcelable比较
Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。
两种序列化方式的区别:
1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类;
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC;
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下,这种情况建议使用Serializable。
阅读(10020) | 评论(0) | 转发(0) |