本文实例讲述了Android编程实现全局获取Context及使用Intent传递对象的方法。分享给大家供大家参考,具体如下:

一、全局获取 Context
Android 开发中很多地方需要用到 Context,比如弹出 Toast、启动活动、发送广播、操作数据库……
由于很多操作都是在活动中进行的,而活动本身就是一个 Context 对象,所以获取 Context 并不是那么困难。
但是,当应用程序的架构逐渐开始复杂起来的时候,很多的逻辑代码都将脱离 Activity 类,由此在某些情况下,获取 Context 并非那么容易。
Android 提供了一个 Application 类,每当应用程序启动的时候,系统就会自动将这个类进行初始化。而我们可以定制一个自己的 Application 类,以便管理程序内一些全局的状态信息,比如说全局 Context。
public class MyApplication extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context =getApplicationContext();
}
public static Context getContext() {
return context;
}
}
这里我们重写了父类的 onCreate()方法,并通过调用 getApplicationContext()方法得到了一个应用程序级别的 Context,然后又提供了一个静态的 getContext()方法,在这里将刚才获取到的 Context 进行返回。
接下来需要告知系统,当程序启动的时候应该初始化 MyApplication 类,在 AndroidManifest 文件的<application>标签下进行指定就可以了。
<application android:name="MyApplication"> ... </application>
这样就已经实现了一种全局获取 Context 的机制,之后不管你想在项目的任何地方使用 Context,只需要调用一下 MyApplication.getContext()就可以了。
复制代码 代码如下:Toast.makeText(MyApplication.getContext(),"全局Context获取成功",Toast.LENGTH_SHORT).show();
二、使用Intent传递对象
使用 Intent 来传递对象通常有两种实现方式,Serializable 和 Parcelable。
Serializable方式:
Serializable 是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可存储到本地。至于序列化的方法也很简单,只需要让一个类去实现 Serizable 这个接口就可以了。
public class Festival implements Serializable {
private String name;
private String data;
public Festival(String name,String data){
this.name = name;
this.data = data;
}
public String getName() {
return name;
}
public String getData() {
return data;
}
}
这里让 Festival 类实现了 Serializable 接口,这样所有的 Festival 对象就都是可以序列化的了。
Festival festival = new Festival("元旦节","1月1日");
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("festival_object",festival);
startActivity(intent);
这里我们创建了一个 Festival 的实例,然后就直接将它传入到 putExtra()方法中,通过 startActivity()传递这个对象。
复制代码 代码如下:Festival festival = (Festival)getIntent().getSerializableExtra("festival_object");
这里调用了 getSerializableExtra()方法来获取传递过来的序列化对象,接着再将它向下转型成 Festival 对象,这样就成功实现了使用 Intent 传递对象的功能了。
Parcelable方式:
Parcelable 方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是 Intent 所支持的数据类型,这样也就实现传递对象的功能了。
public class Person implements Parcelable {
private String name;
private int age;
//省略set和get方法
protected Person(Parcel in) {
name = in.readString();//读取name
age = in.readInt();//读取age
}
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);//写出name
dest.writeInt(age);//写入age
}
}
首先让 Person 类实现 Parcelable 接口,这样就必须重写 describeContents()和 writeToParcel()这两个方法。其中describeContents()方法直接返回 0 就可以了,而 writeToParcel()方法中需要调用 Parcel 的 writeXxx()方法将 Person 类中的字段一一写出。
除此之外,还必须在 Person 类中提供一个名为 CREATOR 的常量,这里创建了 Parcelable.Creator 接口的一个实现,并将泛型指定为 Person。
接着需要重写 createFromParcel()和 newArray()这两个方法,在 createFromParcel()方法中去读取刚才写出的 name 和 age 字段,并创建一个 Person 对象进行返回,其中 name和age都是调用 Parcel 的 readXxx()方法读取到的,注意这里的读取顺序一定要和写出顺序完全相同。而newArray()方法中只需要new出一个Person数组,并使用方法中传入的 size 作为数组大小就可以了。
复制代码 代码如下:Person person = (Person)getIntent().getParcelableExtra("person_object");
依然可以使用相同的代码来传递 Person 对象,只不过获取对象时调用的是 getParcelableExtra() 方法,其他地方完全相同。
在传递对象时,Serializable 和 Parcelable 方法都是可行的,对比一下,Serializable 的方式较为简单,但由于会把整个对象进行序列化,因此效率方面会比 Parcelable方式低一些,根据情况需要合理运用这两种方式。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
# Android
# 全局获取
# Context
# Intent
# 传递对象
# Android List(集合)中的对象以某一个字段排序案例
# Android使用FontMetrics对象计算位置坐标
# Android使用Canvas对象实现刮刮乐效果
# Android中将Bitmap对象以PNG格式保存在内部存储中的方法
# Android中利用C++处理Bitmap对象的实现方法
# Android中实现长按修改ListView对象的内容
# Android中传递对象的三种方法的实现
# Android中深入学习对象的四种引用类型
# 都是
# 就可以
# 序列化
# 应用程序
# 这两个
# 实现了
# 重写
# 只需要
# 完全相同
# 自己的
# 类中
# 的是
# 进阶
# 就会
# 是在
# 在这里
# 相关内容
# 也就
# 只需
# 你想
相关文章:
如何选择可靠的免备案建站服务器?
图册素材网站设计制作软件,图册的导出方式有几种?
视频网站制作教程,怎么样制作优酷网的小视频?
建站org新手必看:2024最新搭建流程与模板选择技巧
建站主机数据库如何配置才能提升网站性能?
如何通过cPanel快速搭建网站?
如何选择CMS系统实现快速建站与SEO优化?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何快速生成ASP一键建站模板并优化安全性?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何在建站之星网店版论坛获取技术支持?
营销式网站制作方案,销售哪个网站招聘效果最好?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
成都网站制作报价公司,成都工业用气开户费用?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
太平洋网站制作公司,网络用语太平洋是什么意思?
建站主机是否等同于虚拟主机?
如何快速生成凡客建站的专业级图册?
网站制作企业,网站的banner和导航栏是指什么?
专业网站建设制作报价,网页设计制作要考什么证?
如何零基础开发自助建站系统?完整教程解析
宝塔面板如何快速创建新站点?
如何快速查询网站的真实建站时间?
如何在腾讯云服务器快速搭建个人网站?
制作网站的模板软件,网站怎么建设?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
,有什么在线背英语单词效率比较高的网站?
高端建站三要素:定制模板、企业官网与响应式设计优化
高防服务器:AI智能防御DDoS攻击与数据安全保障
建站之星CMS五站合一模板配置与SEO优化指南
建站主机如何安装配置?新手必看操作指南
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
简单实现Android验证码
如何用PHP工具快速搭建高效网站?
建站之星后台密码遗忘如何找回?
红河网站制作公司,红河事业单位身份证如何上传?
北京专业网站制作设计师招聘,北京白云观官方网站?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
如何选择高效可靠的多用户建站源码资源?
全景视频制作网站有哪些,全景图怎么做成网页?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
网站制作员失业,怎样查看自己网站的注册者?
香港服务器WordPress建站指南:SEO优化与高效部署策略
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
Android滚轮选择时间控件使用详解
python的本地网站制作,如何创建本地站点?
*请认真填写需求信息,我们会在24小时内与您取得联系。