一、简述
Intent可以携带数据,可以携带的常见的数据分为以下几种:
intent.putExtra(String name, boolean value);
intent.putExtra(String name, byte value);
intent.putExtra(String name, char value);
intent.putExtra(String name, short value);
intent.putExtra(String name, int value);
intent.putExtra(String name, long value);
intent.putExtra(String name, float value);
intent.putExtra(String name, double value);
intent.putExtra(String name, String value);
intent.putExtra(String name, CharSequence value);
intent.putExtra(String name, Parcelable value);
intent.putExtra(String name, Parcelable[] value);
intent.putExtra(String name, Serializable value);
intent.putExtra(String name, boolean[] value);
intent.putExtra(String name, byte[] value);
intent.putExtra(String name, short[] value);
intent.putExtra(String name, char[] value);
intent.putExtra(String name, int[] value);
intent.putExtra(String name, long[] value);
intent.putExtra(String name, float[] value);
intent.putExtra(String name, double[] value);
intent.putExtra(String name, String[] value);
intent.putExtra(String name, CharSequence[] value);
intent.putExtra(String name, Bundle value);
下面分四种情况演示Intent传递数据:
1)基本数据类型
2)借助Bundle传递参数
3)serializable数据类型
4)parcelable数据类型
其中Serializable与Parcelabel 实现时注意事项:
1 )Serializable 的实现,只需要继承 implements Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。
2 )Parcelabel 的实现,需要在类中添加一个静态成员变量 CREATOR,这个变量需要继承 Parcelable.Creator 接口。
下面将使用一个demo来演示各种数据类型的传递,在第二个界面以打印日志的方式来查看数据。
在展示结果界面中通过在启动Activity时Intent携带了一个int类型的字段"data_type"来区分展示哪种类型的数据。
二、测试结果
先看打印日志的结果
1)基本类型数据输出日志
02-21 09:03:19.569 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_boolean:true
02-21 09:03:19.569 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_byte:123
02-21 09:03:19.569 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_char:C
02-21 09:03:19.569 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_short:12
02-21 09:03:19.569 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_int:2
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_long:123456
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_float:1.23
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_double:3.1415926
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_String:string
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_CharSequence:charsequence
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_CharSequence_array:[ta, shi, what]
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_boolean_array:[true, false]
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_byte_array:[10, 1, 11]
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_short_array:[1, 2, 3, 4]
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_char_array:[A, B, C]
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_int_array:[1, 2, 3]
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_long_array:[4, 5, 6, 7, 8]
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_float_array:[1.1, 2.2, 3.3]
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_double_array:[4.4, 5.5, 6.6]
02-21 09:03:19.579 13666-13666/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBase: data_String_array:[string1, string2, string3]
以上输出日志可以参考代码传输的数值进行比对,收到的数据和传递的数据是一致的!
2)借助Bundle传递数据
02-21 09:57:44.349 31882-31882/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBundle: bundle_int:1
02-21 09:57:44.349 31882-31882/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBundle: bundle_String:bundleString
02-21 09:57:44.349 31882-31882/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBundle: map_String:mapString
02-21 09:57:44.349 31882-31882/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBundle: map_Integer:2
02-21 09:57:44.349 31882-31882/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBundle: map_student id:18
02-21 09:57:44.349 31882-31882/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBundle: map_student name:wangWu
02-21 09:57:44.349 31882-31882/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBundle: map_student book author:luXun
02-21 09:57:44.349 31882-31882/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayBundle: map_student book name:yuWen
输出结果与传递的参数一致。这里演示了传递基本数据类型和传递map中经过序列化的数据.
3)serializable数据类型
02-21 09:14:48.709 22863-22863/com.mobile.cdtx.blog I/ReceiveParamsActivity: displaySerializable: student id:12
02-21 09:14:48.709 22863-22863/com.mobile.cdtx.blog I/ReceiveParamsActivity: displaySerializable: student name:zhangSan
02-21 09:14:48.709 22863-22863/com.mobile.cdtx.blog I/ReceiveParamsActivity: displaySerializable: student book author:yuguo
02-21 09:14:48.709 22863-22863/com.mobile.cdtx.blog I/ReceiveParamsActivity: displaySerializable: student book name:English
输出结果与传递的参数一致。演示了一个Student对象中包含基本数据类型和包含另一个对象Book的情况
4)parcelable数据类型
02-21 13:25:41.651 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable:age=15
02-21 13:25:41.651 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable:name=wwt
02-21 13:25:41.651 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable:gender=let
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_array:age=11
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_array:name=zh
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_array:gender=tt
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_array:age=13
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_array:name=tong
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_array:gender=ff
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type:age=18
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type:name=cup
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type:isOk=true
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type:strings=[123, 456, 789]
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type parcelableData:age=9
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type parcelableData:name=pear
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type parcelableData:gender=pink
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type ArrayList<ParcelableData>:age=45
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type ArrayList<ParcelableData>:name=pager
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type ArrayList<ParcelableData>:gender=red
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type ArrayList<ParcelableData>:age=78
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type ArrayList<ParcelableData>:name=pen
02-21 13:25:41.661 29743-29743/com.mobile.cdtx.blog I/ReceiveParamsActivity: displayParcelable: data_parcelable_type ArrayList<ParcelableData>:gender=blue
经过测试,输出结果与传递的数据一致。这里演示了基本数据类型,传递对象,传递对象数组等方式。
三、代码
1)主界面
主界面上有四个按钮,分别用于测试四类情况。
效果图如下:
activity_intent_params.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/activity_intent_params"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/id_btn_base"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="传递基本类型参数"/>
<Button
android:id="@+id/id_btn_bundle"
android:textAllCaps="false"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="传递Bundle类型参数"/>
<Button
android:id="@+id/id_btn_serializable"
android:textAllCaps="false"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="传递Serializable类型参数"/>
<Button
android:id="@+id/id_btn_parcelable"
android:textAllCaps="false"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="传递Parcelable类型参数"/>
</LinearLayout>
主界面代码
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import com.mobile.cdtx.blog.R;
import com.mobile.cdtx.blog.main.data.Book;
import com.mobile.cdtx.blog.main.data.ParcelableData;
import com.mobile.cdtx.blog.main.data.ParcelableType;
import com.mobile.cdtx.blog.main.data.Student;
import java.util.ArrayList;
import java.util.HashMap;
public class IntentParamsActivity extends AppCompatActivity implements View.OnClickListener{
public final static int DATA_BASE = 1;
public final static int DATA_BUNDLE = 2;
public final static int DATA_SERIALIZABLE =3;
public final static int DATA_PARCELABLE = 4;
Button btnBase,btnBundle,btnSerializable,btnParcelable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_params);
initView();//控件的初始化
}
//控件的初始化
private void initView(){
btnBase = (Button)findViewById(R.id.id_btn_base);
btnBundle = (Button)findViewById(R.id.id_btn_bundle);
btnSerializable = (Button)findViewById(R.id.id_btn_serializable);
btnParcelable = (Button)findViewById(R.id.id_btn_parcelable);
btnBase.setOnClickListener(this);
btnSerializable.setOnClickListener(this);
btnParcelable.setOnClickListener(this);
btnBundle.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.id_btn_base:
baseParam();
break;
case R.id.id_btn_bundle:
bundleParam();
break;
case R.id.id_btn_serializable:
serializableParam();
break;
case R.id.id_btn_parcelable:
parcelableParam();
break;
default:
break;
}
}
//传递基本类型数据
private void baseParam(){
Intent intent = new Intent(IntentParamsActivity.this,ReceiveParamsActivity.class);
intent.putExtra("data_type", DATA_BASE);
//基本数据类型
intent.putExtra("data_boolean", new Boolean(true));
intent.putExtra("data_byte", new Byte("123"));
intent.putExtra("data_char", new Character('C'));
intent.putExtra("data_short", new Short("12"));
intent.putExtra("data_int", new Integer(2));
intent.putExtra("data_long", new Long(123456));
intent.putExtra("data_float", new Float(1.23));
intent.putExtra("data_double", new Double(3.1415926));
intent.putExtra("data_String", new String("string"));
CharSequence cs;
Resources res=IntentParamsActivity.this.getResources();
cs=res.getText(R.string.charsequence);
intent.putExtra("data_CharSequence", cs);
String[] csArray={"ta","shi","what"};
intent.putExtra("data_CharSequence_array", csArray);
boolean[] booleanArray = {true,false};
intent.putExtra("data_boolean_array", booleanArray);
byte[] byteArray = {new Byte("10"), new Byte("01"), new Byte("11")};
intent.putExtra("data_byte_array", byteArray);
short[] shortArray={1,2,3,4};
intent.putExtra("data_short_array", shortArray);
char[] charArray = {'A','B','C'};
intent.putExtra("data_char_array",charArray);
int[] intArray = {1,2,3};
intent.putExtra("data_int_array", intArray);
long[] longArray = {(long)4,(long)5,(long)6,(long)7,(long)8};
intent.putExtra("data_long_array",longArray);
float[] floatArray = {(float)1.1,(float)2.2, (float) 3.3};
intent.putExtra("data_float_array", floatArray);
double[] doubleArray = {4.40,5.50,6.60};
intent.putExtra("data_double_array", doubleArray);
String[] stringArray = {"string1","string2","string3"};
intent.putExtra("data_String_array", stringArray);
startActivity(intent);
}
//传递Bundle类型数据
private void bundleParam(){
Intent intent = new Intent(IntentParamsActivity.this,ReceiveParamsActivity.class);
intent.putExtra("data_type", DATA_BUNDLE);
//Bundle中可以存放各种类型的数据和Intent中存放数据类似,这里只演示int,String,实际使用中使用Bundle较多些,比如说:A->B->C,这种情况显然是使用Bundle更方便,一次传过去就可以了
Bundle bundle = new Bundle();
bundle.putInt("bundle_int",1);
bundle.putString("bundle_String","bundleString");
//Bundle中传递HashMap数据:注意Intent中也可以传递此类型数据,这里只在Bundle中演示
HashMap hm=new HashMap();
hm.put("map_String","mapString");
hm.put("map_Integer",2);
Student student = new Student(18,"wangWu",new Book("luXun","yuWen"));
hm.put("map_student",student);
bundle.putSerializable("bts_map", hm);
intent.putExtra("data_Bundle", bundle);
startActivity(intent);
}
//传递serializable类型的数据
private void serializableParam(){
Intent intent = new Intent(IntentParamsActivity.this,ReceiveParamsActivity.class);
intent.putExtra("data_type", DATA_SERIALIZABLE);
Student student = new Student(12,"zhangSan",new Book("yuguo","English"));
intent.putExtra("data_Serializable", student);
startActivity(intent);
}
//传递parcelable类型的数据
private void parcelableParam(){
Intent intent = new Intent(IntentParamsActivity.this,ReceiveParamsActivity.class);
intent.putExtra("data_type", DATA_PARCELABLE);
//传一个对象数据
ParcelableData parcelableData1 = new ParcelableData();
parcelableData1.setAge(15);
parcelableData1.setName("wwt");
parcelableData1.setGender("let");
intent.putExtra("data_parcelable", parcelableData1);
//传一个对象数组数据
ParcelableData parcelableData2 = new ParcelableData();
parcelableData2.setAge(11);
parcelableData2.setName("zh");
parcelableData2.setGender("tt");
ParcelableData parcelableData3 = new ParcelableData();
parcelableData3.setAge(13);
parcelableData3.setName("tong");
parcelableData3.setGender("ff");
ParcelableData[] parcelableDatas = {parcelableData2,parcelableData3};
intent.putExtra("data_parcelable_array",(Parcelable[])parcelableDatas);
//传一个相对较复杂的数据
ParcelableType parcelableType = new ParcelableType();
parcelableType.setAge(18);
parcelableType.setName("cup");
parcelableType.setOk(true);
parcelableType.setStrings(new String[]{"123","456","789"});
ParcelableData parcelableData4 = new ParcelableData();
parcelableData4.setAge(9);
parcelableData4.setName("pear");
parcelableData4.setGender("pink");
parcelableType.setParcelableData(parcelableData4);
ArrayList<ParcelableData> listParcelableData = new ArrayList<ParcelableData>();
ParcelableData parcelableData5 = new ParcelableData();
parcelableData5.setAge(45);
parcelableData5.setName("pager");
parcelableData5.setGender("red");
ParcelableData parcelableData6 = new ParcelableData();
parcelableData6.setAge(78);
parcelableData6.setName("pen");
parcelableData6.setGender("blue");
listParcelableData.add(parcelableData5);
listParcelableData.add(parcelableData6);
parcelableType.setListParcelableData(listParcelableData);
intent.putExtra("data_parcelable_type", parcelableType);
startActivity(intent);
}
}
2)显示结果界面
效果图如下:
布局文件activity_receive_params.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/activity_receive_params"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/id_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="通过打印日志的方式查看传递的参数"/>
<Button
android:id="@+id/id_btn_finish"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="返回"/>
</LinearLayout>
主界面代码
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.mobile.cdtx.blog.R;
import com.mobile.cdtx.blog.main.data.ParcelableData;
import com.mobile.cdtx.blog.main.data.ParcelableType;
import com.mobile.cdtx.blog.main.data.Student;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
public class ReceiveParamsActivity extends AppCompatActivity {
private Button btnFinish;
private static final String TAG = "ReceiveParamsActivity";
public final static int DATA_BASE = 1;
public final static int DATA_BUNDLE = 2;
public final static int DATA_SERIALIZABLE =3;
public final static int DATA_PARCELABLE = 4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receive_params);
btnFinish = (Button)findViewById(R.id.id_btn_finish);
btnFinish.setOnClickListener(new View. OnClickListener(){
@Override
public void onClick(View v) {
finish();
}
});
//解析数据
Intent intent = getIntent();
int dataType = intent.getIntExtra("data_type",0);
displayData(dataType,intent);
}
//展示不同类型的数据
private void displayData(int dataType,Intent intent){
switch (dataType){
case DATA_BASE:
displayBase(intent);
break;
case DATA_BUNDLE:
displayBundle(intent);
break;
case DATA_SERIALIZABLE:
displaySerializable(intent);
break;
case DATA_PARCELABLE:
displayParcelable(intent);
break;
default:
break;
}
}
//展示基本类型数据
private void displayBase(Intent intent){
//解析基本数据类型
boolean booleanData = intent.getBooleanExtra("data_boolean",true);
byte byteData = intent.getByteExtra("data_byte", (byte)0);
char characterData = intent.getCharExtra("data_char",'Z');
short shortData = intent.getShortExtra("data_short",(short)1);
int intData = intent.getIntExtra("data_int",2);
long longData = intent.getLongExtra("data_long",(long)1);
float floatData = intent.getFloatExtra("data_float",(float)1.0);
double doubleData = intent.getDoubleExtra("data_double",2.0);
String stringData = intent.getStringExtra("data_String");
CharSequence cs = intent.getCharSequenceExtra("data_CharSequence");
//解析基本数据类型数组
CharSequence[] stringArray = intent.getCharSequenceArrayExtra("data_CharSequence_array");
boolean[] booleanArray = intent.getBooleanArrayExtra("data_boolean_array");
byte[] byteArray = intent.getByteArrayExtra("data_byte_array");
short[] shortsArray = intent.getShortArrayExtra("data_short_array");
char[] charArray = intent.getCharArrayExtra("data_char_array");
int[] intArray = intent.getIntArrayExtra("data_int_array");
long[] longArray = intent.getLongArrayExtra("data_long_array");
float[] floatArray = intent.getFloatArrayExtra("data_float_array");
double[] doubleArray = intent.getDoubleArrayExtra("data_double_array");
String[] stringsArray = intent.getStringArrayExtra("data_String_array");
//打印基本类型日志
Log.i(TAG, "displayBase: data_boolean:"+String.valueOf(booleanData));
Log.i(TAG, "displayBase: data_byte:"+String.valueOf(byteData));
Log.i(TAG, "displayBase: data_char:"+String.valueOf(characterData));
Log.i(TAG, "displayBase: data_short:"+String.valueOf(shortData));
Log.i(TAG, "displayBase: data_int:"+String.valueOf(intData));
Log.i(TAG, "displayBase: data_long:"+String.valueOf(longData));
Log.i(TAG, "displayBase: data_float:"+String.valueOf(floatData));
Log.i(TAG, "displayBase: data_double:"+String.valueOf(doubleData));
Log.i(TAG, "displayBase: data_String:"+stringData);
Log.i(TAG, "displayBase: data_CharSequence:"+String.valueOf(cs));
//打印基本类型数组日志
Log.i(TAG, "displayBase: data_CharSequence_array:"+ Arrays.toString(stringArray));
Log.i(TAG, "displayBase: data_boolean_array:"+ Arrays.toString(booleanArray));
Log.i(TAG, "displayBase: data_byte_array:"+ Arrays.toString(byteArray));
Log.i(TAG, "displayBase: data_short_array:"+ Arrays.toString(shortsArray));
Log.i(TAG, "displayBase: data_char_array:"+ Arrays.toString(charArray));
Log.i(TAG, "displayBase: data_int_array:"+ Arrays.toString(intArray));
Log.i(TAG, "displayBase: data_long_array:"+ Arrays.toString(longArray));
Log.i(TAG, "displayBase: data_float_array:"+ Arrays.toString(floatArray));
Log.i(TAG, "displayBase: data_double_array:"+ Arrays.toString(doubleArray));
Log.i(TAG, "displayBase: data_String_array:"+ Arrays.toString(stringsArray));
}
//展示Bundle类型数据
private void displayBundle(Intent intent){
Bundle bundle = intent.getBundleExtra("data_Bundle");
int intBundle = bundle.getInt("bundle_int");
String stringBundle = bundle.getString("bundle_String");
//获取ap数据
HashMap map=(HashMap)bundle.getSerializable("bts_map");
String mapString = (String) map.get("map_String");
int mapInteger = (int)map.get("map_Integer");
Student mapStudent = (Student)map.get("map_student");
//打印Bundle中基本数据
Log.i(TAG, "displayBundle: bundle_int:"+String.valueOf(intBundle));
Log.i(TAG, "displayBundle: bundle_String:"+String.valueOf(stringBundle));
//打印Bundle中map数据
Log.i(TAG, "displayBundle: map_String:"+mapString);
Log.i(TAG, "displayBundle: map_Integer:"+String.valueOf(mapInteger));
Log.i(TAG, "displayBundle: map_student id:"+mapStudent.getId());
Log.i(TAG, "displayBundle: map_student name:"+mapStudent.getName());
Log.i(TAG, "displayBundle: map_student book author:"+mapStudent.getBook().getAuthor());
Log.i(TAG, "displayBundle: map_student book name:"+mapStudent.getBook().getName());
}
//展示serializable类型的数据
private void displaySerializable(Intent intent){
Student student = (Student) intent.getSerializableExtra("data_Serializable");
//打印Student日志
Log.i(TAG, "displaySerializable: student id:"+student.getId());
Log.i(TAG, "displaySerializable: student name:"+student.getName());
Log.i(TAG, "displaySerializable: student book author:"+student.getBook().getAuthor());
Log.i(TAG, "displaySerializable: student book name:"+student.getBook().getName());
}
//展示parcelable类型的数据
private void displayParcelable(Intent intent){
//获取传递的数据
ParcelableData parcelableData = intent.getParcelableExtra("data_parcelable");
Parcelable[] ParcelableDataArray = intent.getParcelableArrayExtra("data_parcelable_array");
ParcelableType parcelableType = intent.getParcelableExtra("data_parcelable_type");
//分别打印日志
//打印data_parcelable
Log.i(TAG, "displayParcelable: data_parcelable:age="+parcelableData.getAge());
Log.i(TAG, "displayParcelable: data_parcelable:name="+parcelableData.getName());
Log.i(TAG, "displayParcelable: data_parcelable:gender="+parcelableData.getGender());
//打印data_parcelable_array
if(ParcelableDataArray != null && ParcelableDataArray.length > 0){
for (Parcelable data:ParcelableDataArray){
Log.i(TAG, "displayParcelable: data_parcelable_array:age="+((ParcelableData)data).getAge());
Log.i(TAG, "displayParcelable: data_parcelable_array:name="+((ParcelableData)data).getName());
Log.i(TAG, "displayParcelable: data_parcelable_array:gender="+((ParcelableData)data).getGender());
}
}
// //打印data_parcelable_type
Log.i(TAG, "displayParcelable: data_parcelable_type:age="+parcelableType.getAge());
Log.i(TAG, "displayParcelable: data_parcelable_type:name="+parcelableType.getName());
Log.i(TAG, "displayParcelable: data_parcelable_type:isOk="+parcelableType.isOk());
Log.i(TAG, "displayParcelable: data_parcelable_type:strings="+Arrays.toString(parcelableType.getStrings()));
//打印data_parcelable_type中的对象
Log.i(TAG, "displayParcelable: data_parcelable_type parcelableData:age="+parcelableType.getParcelableData().getAge());
Log.i(TAG, "displayParcelable: data_parcelable_type parcelableData:name="+parcelableType.getParcelableData().getName());
Log.i(TAG, "displayParcelable: data_parcelable_type parcelableData:gender="+parcelableType.getParcelableData().getGender());
//打印data_parcelable_type中的数组
ArrayList<ParcelableData> ParcelableDataArray2 = parcelableType.getListParcelableData();
for(ParcelableData parcelableData2 : ParcelableDataArray2){
Log.i(TAG, "displayParcelable: data_parcelable_type ArrayList<ParcelableData>:age="+parcelableData2.getAge());
Log.i(TAG, "displayParcelable: data_parcelable_type ArrayList<ParcelableData>:name="+parcelableData2.getName());
Log.i(TAG, "displayParcelable: data_parcelable_type ArrayList<ParcelableData>:gender="+parcelableData2.getGender());
}
}
}
四、结论
1.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点, 也不提倡用,但在这种情况下,还是建议你用Serializable 。