Android四大组件:activity、service、content provider、 broadcast receiver
1、activity
数据持久化应该在
onPause()
方法中进行,而不是在onStop()
操作。因为在内存紧张时,系统会直接结束该活动,而不经过onStop()
。Activity栈,是一个后进先出(LIFO)的队列,其在栈中的位置决定了Activity的状态:活动、暂停、停止、待用。
暂停状态下,可见没有焦点,不接受用户输入。 |
停止状态下,不可见,需要保存数据和当前UI状态。 |
待用状态下,activity被杀死,移除栈。 |
- Activity四种加载模式: standard、 singleTop、singleTask、singleInstance。
有两种写法:
//AndroidManifest.xml文件
<activity
android:name=".activity.MainActivity"
android:launchMode="singleTask"/>
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
standard:标准启动模式,默认每次都创建一个实例,允许多个activity重叠。 |
singleTop:当该activity位于栈顶时,启动它不需要新建,而会调用其 `onNewIntent` 方法。 |
singleTask:若该activity不存在,则新建;若存在,就会把task中其上边的活动销毁,然后在调用它的 `onNewIntent` 方法。 |
singleInstance:存在于单独的栈中,独立运行。 |
- Activity之间通过Intent通信。
2、service
service有两种启动方式:bound启动(绑定启动)、start启动。
starte:当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用
stopSelf()
方法停止,或者由其他组件调用stopService()
方法停止。bound:当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。 和启动它的组件同时销毁。
应用程序配置文件中声明全部的service,使用标签。
Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。
3、content provider
ContentProvider,内容提供者主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。
只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。
ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。
开发人员不会直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作。
ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。
4、broadcast receiver
BroadcastReceiver 用于异步接收广播Intent。主要有两大类,用于接收广播的:
·正常广播 Normal broadcasts(用 Context.sendBroadcast()发送)是完全异步的。它们都运行在一个未定义的顺序,通常是在同一时间。这样会更有效,但意味着receiver不能包含所要使用的结果或中止的API。
有序广播 Ordered broadcasts(用 Context.sendOrderedBroadcast()发送)每次被发送到一个receiver。所谓有序,就是每个receiver执行后可以传播到下一个receiver,也可以完全中止传播–不传播给其他receiver。 而receiver运行的顺序可以通过matched intent-filter 里面的android:priority来控制,当priority优先级相同的时候,Receiver以任意的顺序运行。
对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。
动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。
参考:
http://blog.csdn.net/ican87/article/details/21874321;
http://www.cnblogs.com/pepcod/archive/2013/02/11/2937403.html
MVC模式
查看我写的这篇文章:http://blog.csdn.net/carter_yu/article/details/52193042