Contect、SharedPreferences及Intent学习小记

来源:互联网 发布:凡科建站怎么样 知乎 编辑:程序博客网 时间:2024/06/05 00:25

一、Context的描述:

1、描述的是一个应用程序环境的信息,即上下文
2、该类是一个抽象类,Andriod提供了改抽象类的具体实现类(ContextImpl)
3、通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作

  • getApplication():用来获取Application实例,在Activity和Service中才能调用,在其他场景中,比如说BroadcastReceiver中,只能借助getApplicationContext();
  • getBaseContext():得到的是一个contextImpl对象(上下文功能实现类)

  • 在构造方法中不能够调用Context方法

4、一些类

  • Context类:抽象类,提供了一组通用的API。
  • ContextIml.java类:该类实现了Context类的功能
  • ContextWrapper类:该类只是对Context类的一种包装,该类的构造函数包含了一个真正的Context引用,即ContextIml对象。
  • ContextThemeWrapper类:该类内部包含了主题(Theme)相关的接口,即android:theme属性指定的。只有Activity需要主题,Service不需要主题

5、什么时候创建Context实例:
1)创建Application对象时,而且整个APP以哦那个一个Application对象
2)创建Service对象时
3)创建Activity对象时
总Context实例个数 = Service个数 + Activity个数 + 1(Application对应的Context实例)

二、SharedPreferences小记

6、SharedPreferences存储的步骤如下:
  一、根据Context获取SharedPreferences对象
  二、利用edit()方法获取Editor对象。
  三、通过Editor对象存储key-value键值对数据。
  四、通过commit()方法提交数据。
SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。

SharedPreferences是一个接口,程序是无法创建SharedPreferences实例的,可以通过Context.getSharedPreferences(String name,int mode)来得到一个SharedPreferences实例

  • name:是指文件名称,不需要加后缀.xml,系统会自动为我们添加上。文件存储在/data/data//shared_prefs下
  • mode:是指定读写方式,其值有三种,分别为:

Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写
Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写
Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。
SharedPreferences的注意事项:
编辑完SharedPreferences一定要记得调用Editor的commit()方法,否则不会将数据写入到文件里的。

三、Intent

1、作用:不同组件之间通信的“媒介”专门提供组件互相调用的相关信息

  • 启动Activity:可以将Intent对象传递给startActivity()方法或startActivityForResult()方法以启动一个Activity,该Intent对象包含了要启动的Activity的信息及其他必要的数据。
  • 启动Service:可以将Intent对象传递给startService()方法或bindService()方法以启动一个Service,该Intent对象包含了要启动的Service的信息及其他必要的数据。关于使用startService()方法启动Service,可以参见博文《Android中startService的使用及Service生命周期》。关于使用bindService()方法启动Service,可以参见博文《Android中bindService的使用及Service生命周期》。
  • 发送广播:广播是一种所有App都可以接收的信息。Android系统会发布各种类型的广播,比如发布开机广播或手机充电广播等。我们也可以给其他的App发送广播,可以将Intent对象传递给sendBroadcast()方法或sendOrderedBroadcast()方法或sendStickyBroadcast()方法以发送自定义广播。

2、Intent的属性:
1)Action:动作,指Intent要完成的动作,是一个字符串常量
2)Data:执行动作的URI和MIME类型,不同的Action有不同的Data数据指定。
- 如果只设置数据的Uri,需要调用Intent对象的setData()方法;
- 如果只设置数据的MIME类型,需要调用Intent对象的setType()方法;
- 如果要同时设置数据的Uri和MIME类型,需要调用Intent对象的setDataAndType()方法。
需要注意的是,如果你想要同时设置数据的Uri和MIME类型,不要先后调用Intent对象的setData()方法和setType()方法,因为setData()方法和setType()是互斥的,即如果调用了setData()方法,会将Intent中已经通过setType()方法设置的MIME类型重置为空。如果调用了setType()方法,会将Intent中已经通过setData()方法设置的Uri重置为空。

3)Category:一个执行动作Action的附加信息

  • CATEGORY_BROWSABLE 目标组件会允许自己通过一个链接被一个Web浏览器启动,该链接可能是一个图片链接或e-mail信息等。
  • CATEGORY_LAUNCHER 用于标识Activity是某个App的入口Activity。

    4)Type:指定Intent的目标组件的类的名称
    5)Extra:额外的数据信息,Intent中有一个Bundle对象存储着各种键值对,接收该Intent的组件可以从中读取出所需要的信息以便完成相应的工作。有的Intent需要靠Uri携带数据,有的Intent是靠extras携带数据信息。
    6)Flags :标记,Intent类中定义的flag能够起到作为Intent对象的元数据的作用。这些flag会告知Android系统如何启动Activity(例如,新启动的Activity属于哪个task)以及在该Activity启动后如何对待它