一、活动
1、Activity是放在一个Back堆栈中,在弹出放入时,进行onCreate、onStart等方法的回调。
2、应用程序的Activity要让其他应用程序调用的话,则需要在Activity中定义<action>
,<category>
,<data>
。
3、打开Activity,返回结果:
4、Fragment
Fragment作为Activity界面的一部分组成出现。
可以在一个Activity中同时出现多个Fragment,并且,一个Fragment亦可在多个Activity中使用。
在Activity运行过程中,可以添加、移除或者替换Fragment(add()、remove()、replace())
Fragment可以响应自己的输入事件,并且有自己的生命周期,当然,它们的生命周期直接被其所属
的宿主activity的生命周期 影响。
5、Loader
从android3.0开始,Loader可以异步的加载数据至Activity或Fragment。
6、Task 和Back Stack
Task可以理解为一些Activity的集合,一个应用程序启动时,则启动一个任务, Back Stack就是一个
存放Activity的堆栈,后进先出,如果按home键,则堆栈中的所有Activity都stop。
二、服务
service提供后台的服务,甚至可以执行一些进程间的交互。比如service可以处理网络交互,放音乐,操作文件I/O等。
1、一种service叫做Start,可以通过startService()来启动,一旦启动,一个服务可以在后台无线循环,即使启动它的组件已经关闭。
一般来说,service启动一个简单的操作,并不返回结果给调用者。比如可以下载文件,下载完成后,服务自己停止。
2、另外一种Service可以叫做Bound,可以调用bindService,然后向服务发送请求,返回结果等,甚至是跨进程的交互。
当所有的组件都不绑在服务上时,服务摧毁。
3、服务是运行在进程中的主线程中,但是我们应该在服务中启动新的线程在做事情,这样可以防止主程序无响应,提高用户体验。
三、内容提供者
1、内容提供者其实就是数据的提供,后台的实现就是数据库的表,数据库是SQLITE。
2、可以对内容提供者进行数据的增、删、改、查,仍然存在sql注入,后台具体的执行的是相关的sql。
3、如果你想访问内容提供者,那么则通过ContentResolver(Client)去访问Content Provider(Server)。
4、Content Provider的query方法返回一个游标,对所有的查询的结果集进行了封装。
5、展现查询结果可以用SimpleCursorAdapter,ListView配合着使用。
6、Content Provider必须指定权限,如果不指定权限的话,其他应用程序则不能访问此Content Provider。
7、如果一个应用程序没有权限访问Content Provider,则可以使用Intent的方式去访问具有访问权限的其他应用程序的Activity等来返回结果达到
间接访问。
8、可以批量访问,修改Content Provider的数据。
9、怎么决定是否应该使用Content Provider?
1)如果你需要向其他应用程序提供复杂的数据与文件。
2)如果你需要拷贝复杂的数据到其他应用程序。
3)如果你需要使用搜索框架提供自定义搜索建议。
4)如果你仅仅是在自己的应用程序使用,那不应该提供Content Provider来使用SQLIte。
10、如何定义一个Content Provider
1)决定你的数据的存储方式,是文件形式的(图片,声音、视屏),还是SQLite型的。
2)实现ContentProvider类。
3)定义ContentProvider的权限,ContentURI,列名,如果你需要这个ContentProvider所在的应用程序支持意图,则提供意图。
4)加上AbstractThreadedSyncAdapter的实现进行同步数据。
11、_ID这一列是ListView使用的,也就是主键,按照惯例来说是应该有的。
12、android的异常可以跨进程交互。
13、如果你想用Content Provider保护你的数据,那么应该把这些数据放在你的内存设备上,外存上不能限制数据的访问。
四、广播接收者