android Parcelable完全解析

title: android.os.Parcelable文档自译 date: 2014-12-05 09:16:06

tags:

android.os.Parcelable接口的已知间接子类很多,这里就不列举了:

Class Overview

Interface for classes whose instances can be written to and restored from a

Parcel. Classes implementing the Parcelable interface must also have a static

field called CREATOR, which is an object implementing the Parcelable.Creator

interface.

该Interface用于实例可以被写入,并且可以从Parcel中恢复的classes(对于Parcel暂时只要知道它是一个存 放数据的容器就好了,我会在android IPC中写到它)。实现android.os.Parcelable接口的类必须持有一个实 现了android.os.Parcelable接口的名为 CREATOR 的静态字段。

android.os.Parcelable接口典型使用方式,这是官网的例子:

package me.androiddemo.canglangwenyue.androiddemo;

import android.os.Parcel;

import android.os.Parcelable;

/**

* Created by canglangwenyue on 12/5/14.

*/

public class MyParcelable implements Parcelable {

private int mData;

public int describeContents() {

return 0;

}

public void writeToParcel(Parcel out, int flags) {

out.writeInt(mData);

}

public static final Parcelable.Creator<MyParcelable> CREATOR

= new Parcelable.Creator<MyParcelable>() {

public MyParcelable createFromParcel(Parcel in) {

return new MyParcelable(in);

}

public MyParcelable[] newArray(int size) {

return new MyParcelable[size];

}

};

private MyParcelable(Parcel in) {

mData = in.readInt();

}

}

Summary(简介)

Nested Classes(嵌套类)

1.interface Parcelable.ClassLoaderCreator<T>

Specialization of Parcelable.Creator that allows you to receive

the ClassLoader the object is being created in.

解析:专业化的 Parcelable.Creator,允许你接收的Object内部创建的 ClassLoader 对象.

2.interface Parcelable.Creator<T>

Interface that must be implemented and provided as a public CREATOR field that

generates instances of your Parcelable class from a Parcel.

解析:该接口必须被子类实现,而且CREATOR 作为公有字段来提供,CREATOR 用于从 Parcel中实例化你的可包装类.

Constants(常量)

1.int   CONTENTS_FILE_DESCRIPTOR

Bit masks for use with describeContents(): each bit represents a kind of object

considered to have potential special significance when marshalled.

解析:用于 describeContents() 的位掩码,每一位代表它编组时附加的特殊含义。

2.int   PARCELABLE_WRITE_RETURN_VALUE

Flag for use with writeToParcel(Parcel, int): the object being written is a

return value, that is the result of a function such as "Parcelable

someFunction()", "void someFunction(out Parcelable)", or "void

someFunction(inout Parcelable)".

解析:writeToParcel(Parcel, int)的标志位:作为一个返回值,是"Parcelable

someFunction()", "void someFunction(out Parcelable)", or "void

someFunction(inout Parcelable)"返回的result。

Public Methods(公共method)

1.abstract int   describeContents()

Describe the kinds of special objects contained in this Parcelable‘s marshalled

representation.

解析:描述各种特殊对象,它们包含在可包装对象的编组形式中.

2.abstract void  writeToParcel(Parcel dest, int flags)

Flatten this object in to a Parcel.

解析:将该对象展开到Parcel(存放数据的容器)中。

Parcelable适用于通过Intent来传递自定义对象。最后给出一个用Parcelable进行数据传送的例子

1.发送Object的Activity,内容很简单,点击Button,Intent携带Object跳转到MainActivity2(用来接收Object的Activity)。

package me.androiddemo.canglangwenyue.androiddemo;

import android.content.Intent;

import android.support.v7.app.ActionBarActivity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import java.util.HashMap;

/**

* @author canglangwenyue

* 用来发送信息的Activity

*/

public class MainActivity extends ActionBarActivity {

private Button sendButton;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

sendButton = (Button) findViewById(R.id.send_button);

sendButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent();

Person person = new Person();

person.name = "WenYue";

intent.putExtra("WenYue",person);

intent.setClass(MainActivity.this,MainActivity2.class);

startActivity(intent);

}

});

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.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();

//noinspection SimplifiableIfStatement

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}

}

2.MainActivity2用来接收来自MainActivity的Object,并打印Person.name的长度和content。

package me.androiddemo.canglangwenyue.androiddemo;

import android.content.Intent;

import android.support.v7.app.ActionBarActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

/**

  • @author canglangwenyue
  • 接收数据的Intent */

    public class MainActivity2 extends ActionBarActivity {

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_activity2);

    Intent intent = getIntent();

  • Person person = intent.getParcelableExtra("WenYue");
  • Log.e("MainActivity2 received message‘s length----->",String.valueOf(person.name.length()));
  • Log.e("MainActivity2 received message content------>",person.name);
  • }

    @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main_activity2, 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();

    //noinspection SimplifiableIfStatement

  • if (id == R.id.action_settings) {
  • return true;
  • }
  • return super.onOptionsItemSelected(item);
  • } }

3.Parcelable的实现,具体细节前面已经讲到了,就不多说了。

package me.androiddemo.canglangwenyue.androiddemo;

import android.os.Parcel;

import android.os.Parcelable;

/**

* Created by canglangwenyue on 12/5/14.

* Parcelable常用于Intent中进行自定义对象的传递

*/

public class Person implements Parcelable {

public String name;

@Override

public int describeContents() {

return 0;

}

@Override

public void writeToParcel(Parcel dest, int flags) {

dest.writeString(name);

}

/*

需要重写Creator实现android.os.Parcelable接口的类必须持有一个实现了android.os.Parcelable接口的名为 CREATOR 的静态字段

*/

public static final Creator<Person> CREATOR = new Parcelable.Creator<Person>() {

/*

重写Creator方法

*/

@Override

public Person createFromParcel(Parcel source) {

Person person = new Person();

person.name = source.readString();

return person;

}

@Override

public Person[] newArray(int size) {

return new Person[0];

}

};

}

最后给出在MainActivity2中log打印的结果,眼见为实,哈哈:

再附上demo下载地址,希望对大家与帮助: 苍狼问月

时间: 2024-08-29 00:03:22

android Parcelable完全解析的相关文章

Android Service完全解析,关于服务你所需知道的一切(下) (转载)

转自:http://blog.csdn.net/guolin_blog/article/details/9797169 转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在 上一篇文章中,我们学习了Android Service相关的许多重要内容,包括Service的基本用法.Service和Activity进行通信.Service的销毁方式. Service与Thread的关系.以及如何创建前台Service.以上

Android Service完全解析,关于服务你所需知道的一切(下)

转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要内容,包括Service的基本用法.Service和Activity进行通信.Service的销毁方式.Service与Thread的关系.以及如何创建前台Service.以上所提到的这些知识点,基本上涵盖了大部分日常开发工作当中可能使用到的Service技术.不过关于Service其实还有一个更加

【Android开发精要笔记】Android组件模型解析

Android组件模型解析 Android中的Mashup 将应用切分成不同类别的组件,通过统一的定位模型和接口标准将他们整合在一起,来共同完成某项任务.在Android的Mashup模式下,每个组件的功能都可以被充分的复用.来自不同应用的组件可以有机地结合在一起,共同完成任务. 基于Mashup的Android应用模型 三个基本要素:组件.连接.配置 接口就是实现单元.从代码来看,组件就是派生自特定接口或基类的子类的实现,如界面组件Activity就是指派生自android.app.Activ

Android Service完全解析(二)

转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要内容,包括Service的基本用法.Service和Activity进行通信.Service的销毁方式.Service与Thread的关系.以及如何创建前台Service.以上所提到的这些知识点,基本上涵盖了大部分日常开发工作当中可能使用到的Service技术.不过关于Service其实还有一个更加

【转】Android Service完全解析,关于服务你所需知道的一切(下) ---- 不错

原文网址:http://blog.csdn.net/guolin_blog/article/details/9797169 转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要内容,包括Service的基本用法.Service和Activity进行通信.Service的销毁方式.Service与Thread的关系.以及如何创建前台Service.以上

Android Service完全解析,关于服务你所需知道的一切(上)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序中都扮演着非常重要的角色.它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务.必要的时候我们甚至可以在程序退出的情况下,让Service在后台继续保持

Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/25466665 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文. http://developer.android.com/guide/topics/ui/actionbar.html 限于篇幅的原因,在上篇文章中我们只学习了ActionBar基础部分的知识,那么本篇文章我们将接着上一章的内容继续学习,探究一下ActionBar

Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/18234477 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文. http://developer.android.com/guide/topics/ui/actionbar.html Action Bar是一种新増的导航栏功能,在Android 3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用

Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示

Android JSON原生解析的几种思路,以天气预报为例 今天项目中要实现一个天气的预览,加载的信息很多,字段也很多,所以理清了一下思路,准备独立出来写一个总结,这样对大家还是很有帮助的,老司机要开车了 涉及到网络,你就一定要先添加权限,准没错 <!--网络权限--> <uses-permission android:name="android.permission.INTERNET" /> 一.归属地查询(JSONObject) 这个也是最简单的一类Json