Android学习日记(yzy):intent传递的多种数据类型
2016-06-12 16:18
507 查看
android中intent的最基本三种使用方式:
一:启动Activity,service或者Broadcast;
二:应用间的交互或者通讯;
三:多个Activity和service之间传递数据。
Intent可以传递的数据类型用多种。基本上分为五种;
一:传递简单和基本的数据类型(包括int,char,string等类型的数据);
二:Bundle类型
三:Serializable对象(通过serializable接口传递序列化数据);
四:parcelable对象(通过parcelable接口传递包裹类型的数据);
五:intent类型;
注意向:Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,parcelable的编程实现更加复杂,但具有更高的效率和性能,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable。
代码实现了intent一般的数据传递,bundle类型和parcelable对象的数据传递:
MainActivity.class
Parcelable代码为:
SecondActivity代码为:
一:启动Activity,service或者Broadcast;
二:应用间的交互或者通讯;
三:多个Activity和service之间传递数据。
Intent可以传递的数据类型用多种。基本上分为五种;
一:传递简单和基本的数据类型(包括int,char,string等类型的数据);
二:Bundle类型
三:Serializable对象(通过serializable接口传递序列化数据);
四:parcelable对象(通过parcelable接口传递包裹类型的数据);
五:intent类型;
注意向:Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,parcelable的编程实现更加复杂,但具有更高的效率和性能,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable。
代码实现了intent一般的数据传递,bundle类型和parcelable对象的数据传递:
MainActivity.class
public class MainActivity extends Activity implements View.OnClickListener { private Button Btn_input; private Button Btn_bundle; private Button Btn_Parcelable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Btn_input =(Button)findViewById(R.id.Btn_input); Btn_bundle = (Button)findViewById(R.id.Btn_bundle); Btn_Parcelable = (Button)findViewById(R.id.Btn_Parcelable); Btn_input.setOnClickListener(this); Btn_bundle.setOnClickListener(this); Btn_Parcelable.setOnClickListener(this); } public void onClick(View view){ switch (view.getId()){ // 通过putextra来传递类似char,string,int等类型的简单数据。 // case R.id.Btn_input: // Intent intent = new Intent(MainActivity.this,SecondActivity.class); // intent.putExtra("key_str","传递简单基础的数据"); // startActivity(intent); // break; // case R.id.Btn_bundle: // str = "通过bundle来传递封装的多个数据类型"; // Bundle bundle = new Bundle(); // bundle.putInt("key_bundle_int",1); // bundle .putString("key_bundle_str",str); // Intent intent_01 = new Intent(MainActivity.this,SecondActivity.class); // intent_01.putExtras(bundle); // startActivity(intent_01); // break; case R.id.Btn_Parcelable: Parcelable_Book book = new Parcelable_Book(); book.setBookName("钢铁是怎么练成的"); book.setAuthor("里古拉.奥斯特洛夫斯基"); book.setPublishDate(1933); Intent intent_02 = new Intent(MainActivity.this,SecondActivity.class); Bundle bundle_01 = new Bundle(); bundle_01.putParcelable("key_parcelable",book); intent_02.putExtras(bundle_01); startActivity(intent_02); } } }
Parcelable代码为:
public class Parcelable_Book implements Parcelable { private String bookName; private String author; private int publishDate; public Parcelable_Book() { } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPublishDate() { return publishDate; } public void setPublishDate(int publishDate) { this.publishDate = publishDate; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeString(bookName); out.writeString(author); out.writeInt(publishDate); } public static final Parcelable.Creator<Parcelable_Book> CREATOR = new Creator<Parcelable_Book>() { @Override public Parcelable_Book[] newArray(int size) { return new Parcelable_Book[size]; } @Override public Parcelable_Book createFromParcel(Parcel in) { return new Parcelable_Book(in); } }; public Parcelable_Book(Parcel in) { bookName = in.readString(); author = in.readString(); publishDate = in.readInt(); } }
SecondActivity代码为:
public class SecondActivity extends Activity { private String str = new String(); private TextView TV_str_in; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.layout_second); TV_str_in = (TextView)findViewById(R.id.Tv_str_in); // Intent intent = getIntent(); // 通过getextra接受简单的数据类型 // str = intent.getStringExtra("key_str"); // TV_str_in.setText(str); // 通过bundle传递数据 // Intent intent_01 = getIntent(); // Bundle bundle = intent.getExtras(); // TV_str_in.setText("nember is :"+bundle.getInt("key_bundle_int")+"str is:"+bundle.getString("key_bundle_str")); // 通过parcelable来传递数据 Intent intent_02 = getIntent(); Bundle bundle_01 = new Bundle(); bundle_01 = intent_02.getExtras(); Parcelable_Book book = bundle_01.getParcelable("key_parcelable"); TV_str_in.setText("书名为:"+book.getBookName()+"\n作者名字是:"+book.getAuthor()+"\n出版时间是:"+book.getPublishDate()); } }
相关文章推荐
- Android Studio 使用gradle进行编译(附)
- android 加载html页面
- Android ramdisk.img system.img userdata.img介绍与使用
- Android 6.0 运行时权限处理完全解析
- 使用startForeground让android服务前台运行
- Android开发之Theme、Style探索及源码浅析
- Android开发笔记(一百零五)社会化分享SDK
- Android笔记FirstCode002
- android坐标
- android编译与调试—ramdisk.img—system.img—userdata.img
- 如何测试APK是否设置android:debuggable="false"
- Android EditText获取焦点并弹出软键盘
- Android ActionBar-左上角icon设置
- Android学习笔记三之Android基础
- Android Snackbar 替换Toast吧
- Android 触摸及手势操作GestureDetector
- Android DrawerLayout 侧滑菜单
- android 使用Scroller实现美团悬浮框,网易左右滑动菜单效果
- Android属性动画完全解析(上),初识属性动画的基本用法
- android 后台service 不被杀死的几种方法