剖析Android SDK:Android组件详解

简介: 版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/52997004 在本系列教程当中,我们了解了在进行应用程序创建过程中需要使用到的各种Android基础开发功能。
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/52997004

在本系列教程当中,我们了解了在进行应用程序创建过程中需要使用到的各种Android基础开发功能。到目前为止,我们已经一同学习了Android应用程序中的结构与典型元素,其中包括用户界面元素以及数据存储。利用当下已经掌握的知识,大家完全可以着手创建自己的Android应用。不过在实际操作之前,我们还要梳理一遍部分常用Android组件——这也正是今天这篇文章的主要内容。在本系列的下一篇文章中,我们将探讨SDK示例代码。

介绍

Android应用程序当中包含四大组件:Activity、Service、Content Provider以及Broadcast Receiver。只要大家创建或者使用其中的任何一种,就必须将对应元素添加到项目清单当中。我们之前已经跟Activity打了不少交道,因此在今天的文章中我就不再浪费篇幅加以介绍了。现在让我们把注意力集中在另外三种主要应用程序组件身上。需要强调的是,我还将介绍大家在应用程序当中最可能用到的其它一些资源,其中包括fragment以及action bar。

1.Service

在Android系统当中,一项Service就相当于一个后台进程。Service通常被用于那些正在进行或者需要持续很长一段时间的进程。事实上Service并不具备用户界面,因此它们通常需要与其它组件结合起来以实现功效,例如与Activity联手。最典型的例子就是,在应用程序当中Activity会在用户操作的同时启动一项Service,这项Service也许会将数据上传至Web资源当中。用户可以继续与该Activity进行交互,但与此同时Service的运作却不受影响——因为它的执行一直在后台完成。

提示:如果大家希望执行获取互联网数据之类的后台进程,其中也不一定非要使用Service类。根据应用实际需求的不同,大家可能更适合在自己的Activity中利用内部AsyncTask类来解决问题。它能让后台进程与用户界面彻底分离,但我们的Activity仍然可以接收来自AsyncTask的运作结果并将其上更新至用户界面当中。

要将一项Service组件添加到清单当中,我们需要利用以下语法及其元素取代应用程序元素:

大家可以在Eclipse当中创建一个Service类,其过程与之前介绍过的Activity一样、只不过这次是把Service选择为超级类。Service与Activity组件的区别我们之前已经谈到过,二者之间存在多种重大差异。如果我们以Activity为起点启动一项Service,而用户又通过导航从该Activity切换到了其它应用程序处,那么该Service仍将继续运行。因此,Service拥有的生命周期与我们所熟知的Activity完全不同,大家需要将这一点牢记于心、从而确保自己的应用程序能够有效运转。

其它应用程序组件可以与Service绑定,并向其请求并接收数据。如果一项绑定Service正处于运行当中,那么所有与之相绑定的组件停止之后它也将同时进入停止状态。尽管Service与应用程序的用户界面并无关联,但随Activity启动的Service会与之运行在同一线程当中。然而,如果大家的Service需要使用大量处理资源,那么我们最好为其创建一个独立的运行线程。请大家 点击此处 查看更多来自《Android开发者指南》中关于Service的说明。

2.Content Provider

另一种组件Content Provider用于管理数据集。这里指的数据集既可以单纯归属于我们的应用程序,也可以与其它应用所共享、能够对数据进行查询及修改。如果大家为自己的应用程序创建了一个用于管理数据的Content Provider,那么我们的UI组件(例如Activity)就能够使用该Content Provider,通常是利用Content Resolver类来实现与数据的交互。当被其它应用程序使用时,该Content Provider则通过标准方法来访问数据、从而与数据库等结构化数据集实现交互。

如果大家对于关系类数据库已经非常熟悉,那么应该非常了解Content Provider所使用的数据访问方法。数据会被Content Provider提交给一系列包含行与列的表格,其中每行(或者每条记录)中的列都包含一个单独的数据值。因此,处理通过Content Provider返回的数据与处理数据库查询结果非常相似。

虽然有时候我们可能会创建一个专门的Content Provider程序,但在最初着手开发自己的第一款应用时、大家基本上还是会直接使用由其他开发者或者Android系统本身所提供的Content Provider——例如设备日程表或者联系人。Content Provider能够定义客户端应用所需要的权限,从而实现内容使用。为了在应用程序当中使用Content Provider,大家需要在清单当中为其添加相应的权限。

提示:如果大家只是需要一套应用程序当中的结构化数据源,那么我们通常并不需要单独创建Content Provider。大家可以创建一套只适用于我们应用程序本身的SQLite数据库,而完全不需要使用Content Provider类。我们需要创建Content Provider的惟一情况在于,大家希望从我们的应用程序当中将结构化数据复制到其它应用处,或者大家希望使用搜索框架。

3.Broadcast Receiver

Android系统能够发出多种应用程序能够响应的广播信息。大家也可以开发出应用程序来发出这些广播,但这种可能性与监听现有广播相比要低得多,至少对我们的第一款应用来说是这样。系统通知当中包含关于设备硬件的各类信息,例如电池电量、屏幕关闭以及充电器是否接入插座等等。

为了接收来自Android系统的广播通知,我们的应用程序需要使用Broadcast Receiver。举个典型的例子,电池电量工具会在电池电量发生实际变化时更新显示结果。在这种情况下,大家可以将Service类与Broadcast Receiver配合使用,从而保证应用程序始终在后台监听通知内容。

Android系统将广播通知称为intent,它能够被用于启动Activity。作为系统执行的操作,intent可以实现Activity启动或者发出通知。要使用Broadcast Receiver,我们的应用程序必须在清单中对其作出声明;此外还有一套备选intent filter,用于指示我们想要接收的操作:

通过以上代码,我们应用中的Broadcast Receiver就能够接收“battery low(电池电量低)”这一intent。请注意,我们无法通过在清单中声明action这种方式接收全部系统通知。在某些情况下,大家必须完成注册来实现通知接收,例如在Java当中使用BATTERY_CHANGED action。

4.其它类

正如大家所见,Android组件的设计初衷在于为不同应用程序提供彼此之间的交互效果。正如广播通知可用于系统之上的任何应用,Android还提供其它一系列action、帮助我们在应用程序中完成各类常见任务——例如拨打电话号码。同样,大家也可以使用由其他开发人员所提供的功能,从而快速实现预定处理流程、节约代码开发量并帮助自己将更多精力集中在应用程序的独特之处上。当我们启动一项intent时,可以通过设置使其向启动中的Activity返回一个结果——即使所启动的intent并非我们应用程序的组成部分。这就使我们的应用能够在要求操作完成之后继续运行。

其它值得关注的Android组件还包括fragment以及action bar。下面就让我们简单对二者进行探讨:

Fragment

比起单纯利用Activity以及布局配置来定义应用程序中各个屏幕下的用户界面,使用fragment的话效率可能会更高一些。在fragment的帮助下,大家可以将自己的用户界面拆分为逻辑部分,甚至在应用程序的多个屏幕之间重复使用同样的部分。这样一来,我们不仅能够节约大量花在实现同样视觉/交互元素上的重复劳动,同时也实现了修改一点即完成对整款应用变更的效果。Fragment在Android系统中属于Activity中的组成部分,因此每个fragment都要与其所在的Activity生命周期相适应。

Action Bar

在应用程序开发过程中,action bar也是我们经常需要用到的关键性用户界面元素。它的作用在于为我们的应用程序提供足以作用于整套Android系统的用户界面,这也使它成为该平台用户们最熟悉的元素。一般来说,action bar当中所显示的条目包括用户在应用程序当中所处的位置以及应用程序各个部分之间的导航系统。要在Activity当中使用action bar,大家需要保证自己的类当中包含ActionBarActivity类,并在清单当中将AppCompat主题应用在该Activity当中。

总结

具体使用哪一种Android类及组件取决于大家的应用程序到底要执行哪些任务。不过经过文章的论述,相信应该能够帮助大家对类与组件的类型及数量有所了解,并根据实际情况作出正确选择。对于特定特性或者功能来说,我们往往很难决定具体该使用哪款组件或者类,因此请大家在判断之前确保自己对它们的作用拥有清晰的了解。在接下来的教程当中,我们将探讨Android示例代码以及应用程序的发布流程。

目录
相关文章
|
16天前
|
前端开发 JavaScript 开发工具
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
91 5
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
1月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
176 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
1月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
179 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
3月前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
4月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
4月前
|
Java Linux API
Android SDK
【10月更文挑战第21天】
158 1
|
5月前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
103 7
|
5月前
|
存储 Android开发 开发者
深入理解安卓应用开发的核心组件
【10月更文挑战第8天】探索Android应用开发的精髓,本文带你了解安卓核心组件的奥秘,包括Activity、Service、BroadcastReceiver和ContentProvider。我们将通过代码示例,揭示这些组件如何协同工作,构建出功能强大且响应迅速的应用程序。无论你是初学者还是资深开发者,这篇文章都将为你提供新的视角和深度知识。
|
5月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
172 0
|
5月前
|
XML 前端开发 Java
安卓应用开发中的自定义View组件
【10月更文挑战第5天】自定义View是安卓应用开发的一块基石,它为开发者提供了无限的可能。通过掌握其原理和实现方法,可以创造出既美观又实用的用户界面。本文将引导你了解自定义View的创建过程,包括绘制技巧、事件处理以及性能优化等关键步骤。

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 6
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 9
    Android实战经验之Kotlin中快速实现MVI架构
  • 10
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
  • 1
    【Azure Storage Account】利用App Service作为反向代理, 并使用.NET Storage Account SDK实现上传/下载操作
    23
  • 2
    【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    91
  • 3
    CompreFace:Star6.1k,Github上火爆的轻量化且强大的人脸识别库,api,sdk都支持
    54
  • 4
    【Azure Developer】编写Python SDK代码实现从China Azure中VM Disk中创建磁盘快照Snapshot
    29
  • 5
    【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    53
  • 6
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    176
  • 7
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    179
  • 8
    【01】完整开发即构美颜sdk的uni官方uts插件—让所有开发者可以直接使用即构美颜sdk的能力-优雅草卓伊凡
    80
  • 9
    AutoTalk第十三期-应知必会的自动化工具-阿里云SDK支持策略(一)
    63
  • 10
    自动化AutoTalk第十期:应知必会的自动化工具-阿里云SDK
    66