Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29233
  • 博文数量: 4
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 41
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-06 09:25
文章分类

全部博文(4)

文章存档

2014年(4)

我的朋友

分类: Android平台

2014-05-15 18:38:57

最近在做项目的时候,遇到要在新线程向UI线程传送一个对象,自己试试了下面方法。

还是直接贴代码:
XML文件

点击(此处)折叠或打开

  1. <LinearLayout xmlns:android=""
  2.     xmlns:tools=""
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:orientation="vertical">

  6.     <TextView android:id="@+id/textview"
  7.         android:layout_width="wrap_content"
  8.         android:layout_height="wrap_content"
  9.         android:text="hello_world" />
  10.     
  11.     
  12. </LinearLayout>
User.java

点击(此处)折叠或打开

  1. package com.example.handlerdemo;

  2. import java.io.Serializable;

  3. public class User implements Serializable{
  4.     private String name;
  5.     private int age;
  6.     
  7.     public User(){}
  8.     
  9.     public User(String name, int age){
  10.         this.name = name;
  11.         this.age = age;
  12.     }
  13.     
  14.     public String getName(){
  15.         return this.name;
  16.     }
  17.     public int getAge(){
  18.         return this.age;
  19.     }
  20. }
MainActivity.java

点击(此处)折叠或打开

  1. package com.example.handlerdemo;

  2. import android.os.Bundle;
  3. import android.os.Handler;
  4. import android.os.Message;
  5. import android.app.Activity;
  6. import android.widget.TextView;

  7. public class MainActivity extends Activity {

  8.     public Handler mHandler;
  9.     MyHandler myhandler;
  10.     @Override
  11.     protected void onCreate(Bundle savedInstanceState) {
  12.         super.onCreate(savedInstanceState);
  13.         setContentView(R.layout.activity_main);
  14.         myhandler = new MyHandler();
  15.         
  16.         myhandler.start();
  17.         
  18.         mHandler = new Handler(){
  19.             @Override
  20.             public void handleMessage(Message msg){
  21.                 if(msg.what == 0x123){
  22.                     TextView textview = (TextView) findViewById(R.id.textview);
  23.                     System.out.println("handlerMessage");
  24.                     User user = (User) msg.getData().getSerializable("USER");
  25.                     textview.setText("name:" + user.getName() + " age:" + user.getAge());
  26.                 }
  27.             }
  28.         };
  29.     }

  30.     class MyHandler extends Thread{
  31.         
  32.         public void run(){
  33.             User user = new User("haha", 12);
  34.             Message msg = new Message();
  35.             msg.what = 0x123;
  36.             Bundle b = new Bundle();
  37.             b.putSerializable("USER", user);
  38.             msg.setData(b);
  39.             mHandler.sendMessage(msg);
  40.             
  41.         }
  42.     }

  43. }
主要注意的是User类要实现Serializable接口。

Serializable和Parcelable比较
Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。
两种序列化方式的区别:
1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类;
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC;
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下,这种情况建议使用Serializable。


阅读(10020) | 评论(0) | 转发(0) |
0

上一篇:启程

下一篇:小记--20140517

给主人留下些什么吧!~~