解析Activity、Intent、Service

一、 Activity    
      Activity android中最今本的应用程序组件,应用程序中,一个Activity 通常 一个单独的屏幕,每一个Activity 都被实现为一个单独的类,这些类都Activity 基类中继承来的,Activity 类会显示由视图控件组成的用户接口,并对视图控件的事件做出响应。一个复杂的应用 由多个屏幕显示组成。这里每一个屏幕的显示就 一个Activity ,从一个屏幕的显示到另一个新屏幕的显示并完成相关的事件 很容易实现的,这些屏幕Activity 相互交互的,他们直接通信从而完成相应的功能。当一个新的屏幕打开时,前一个屏幕将会暂停,并保存在历史堆栈中,用户可以从历史堆栈中返回前一个屏幕。当屏幕不再使用时,我们可以从历史堆栈中删除它,默认情况下,Android会保留从主屏幕到每一个应用的运行屏幕。Activity 代表一个用户所能看到的屏幕,Activity 主要 处理一个应用的整体性工作,如监听系统事件(按键、触摸屏幕等)、为用户显示指定的View、启动其他Activity 等,其他的Activity 继承Activity 基类后,通过重写父类的方法来实现各种功能。
二、Intent
    Android专有类Intent 的调用 用来进行架构屏幕之间的切换的。Intent 描述应用想要做 什么Intent 数据结构中两个最重要的部分 动作和动作对应的数据,典型的动作类型有:Main(活动的门户)、View、Pick、Edit等,而动作对应的数据 应URI的形式进行表示的,这里的URI就相当于这些动作的ID,一个动作对应一个动作数据。Android使用了Intent 这个特殊类,实现在屏幕与屏幕之间的移动。Intent 类用用来描述一个应用将会做什么 事情。与之有 关系 的一个类叫IntentFilter类,相对于intent 一个有效的做事情的请求,一个IntentFilter则用于描述一个Activity (或者IntentReceiver)能够操作那些intent 。一个Activity 如 果要显示一个人的联系方式时,需要事先声明一个IntentFilter,这个IntentFilter要知道怎么去处理View动作和表示一个人的 URI,IntentFilter需要AndroidManifest.xml中定义,如AndroidManifest.xml中的:
<intent -filter>
                <action android:name="android.intent .action.MAIN" />
                <category android:name="android.intent .category.LAUNCHER" />
</intent -filter>。
    通过解析各种intent ,从一个屏幕导航到另一个屏幕 很简单的。当向前导航时,activity 将会调用startActivity(IntentmyIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter 中查找,找到最匹配myIntent 的Intent 对应的activity 。新的activity 接收到myIntent 的通知后,开始运行。当startActivity 方法被调用将触发解析myIntent 的动作,这个机制提供了两个关键好处:
    A、Activities 能够重复利用从其它组件中以Intent 的形式产生的一个请求;
    B、Activities 可以在任何时候被一个具有相同IntentFilter 的新的Activity 取代。
三、IntentReceiver
    当你希望你的应用能够对一个外部的事件(如当电话呼入时,或者数据网络可用时,或者到了晚上时)做出响应,你可以使用一个IntentReceiver。 虽然IntentReceiver 在感兴趣的事件发生时,会使用NotificationManage通知用户,但它并不能生成一个UI。IntentReceiver 在AndroidManifest.xml 中注册,但也可以在代码中使用Context.registerReceiver()进行注册。当一个intentreceiver 被触发时,你的应用不必对请求调用intentreceiver,系统会在需要的时候启动你的应用。各种应用还可以通过使用 Context.broadcastIntent()将它们自己的intentreceiver 广播给其它应用程序。
四、Service
    一个Service 一段长生命周期的,没有用户界面的程序。比较好的一个例子就 一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity ,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity ,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service ,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。
五、Content Provider
      Android 应用程序能够将它们的数据保存到文件、SQLite 数据库中,甚至 任何有效的设备中。当你想将你的应用数据与其它的应用共享时,内容提供器就可以发挥作用了。因为内容提供器类实现了一组标准的方法,从而能够让其它的应用保存或读取此内容提供器处理的各种数据类型。数据 应用的核心。在Android 中,默认使用鼎鼎大名的SQLite 作为系统DB。但 在Android 中,使用方法有点小小的不一样。在Android 中每一个应用都运行在各自的进程中,当你的应用需要访问其他应用的数据时,也就需要数据在不同的虚拟机之间传递,这样的情况操作起来可能有些困难(正常情 况下,你不能读取其他的应用的db 文件),ContentProvider 正 用来解决在不同的应用包之间共享数据的工具。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值