安卓-Intent传递数据

一、简述

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 。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值