Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

Android知识架构·笔试·四大组件和MVC模式

$
0
0

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

作者:carter_yu 发表于2017/3/14 16:00:58 原文链接
阅读:22 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>