Android中Context,Intent,Bundle

来源:互联网 发布:sql查询多字段重复 编辑:程序博客网 时间:2024/06/07 03:52

Context

Context是什么

可以理解为是系统所处的环境,一个与系统交互的过程,可以用来startActivity,bindService,unbindService,加载资源,创建View的时候都要用到,从代码来看就是一个抽象类。

结构

Context继承结构

数量

Activity数量+Service数量+1(Application)

功能

弹出Toast,启动Activity,开启服务,发送广播。绑定服务等

作用域

作用域
只能使用Activity来showDialog,并且对于开启服务以及Layout inflation最好也使用Activity

如何获取

1:View.getContext,返回当前View对象的Context对象,通常是当前正在展示的Activity对象。
2:Activity.getApplicationContext,获取当前Activity所在的(应用)进程的Context对象,通常我们使用Context对象时,要优先考虑这个全局的进程Context。
3:ContextWrapper.getBaseContext():用来获取一个ContextWrapper进行装饰之前的Context,可以使用这个方法,这个方法在实际开发中使用并不多,也不建议使用。
4:Activity.this 返回当前的Activity实例,如果是UI控件需要使用Activity作为Context对象,但是默认的Toast实际上使用ApplicationContext也可以。

getApplication()与getApplicationContext()

返回相同的内存地址,都可以获取到Context对象,getApplication()方法的语义性非常强,一看就知道是用来获取Application实例的,但是这个方法只有在Activity和Service中才能调用的到。那么也许在绝大多数情况下我们都是在Activity或者Service中使用Application的,但是如果在一些其它的场景,比如BroadcastReceiver中也想获得Application的实例,这时就可以借助getApplicationContext()方法了。

Context的正确使用

一般Context造成的内存泄漏,几乎都是当Context销毁的时候,却因为被引用导致销毁失败,而Application的Context对象可以理解为随着进程存在的,所以我们总结出使用Context的正确姿势:
1:当Application的Context能搞定的情况下,并且生命周期长的对象,优先使用Application的Context。
2:不要让生命周期长于Activity的对象持有到Activity的引用。
3:尽量不要在Activity中使用非静态内部类,因为非静态内部类会隐式持有外部类实例的引用,如果使用静态内部类,将外部实例引用作为弱引用持有。

Intent

  1. Intent是连接Android组件之间的桥梁,是一种通信机制,可用于应用程序内部的activity, service和broadcast receiver之间的交互
  2. Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。
  3. 有显示和隐式使用之分

Intent的作用

Intent Filter

Intent过滤器

除了组件之间的信息传递,还可以用来
1. 显示网页
2. 显示拨打界面页面
3. 显示发送短信界面
4. 播放指定路径的音乐
5. 卸载程序
6. 安装程序