Android的系统服务一览
- 格式:pdf
- 大小:311.57 KB
- 文档页数:5
Android 应用程序的基本组件Android 操作系统是目前世界上最流行的移动操作系统之一。
它提供了广泛的应用程序开发工具和框架,使开发者能够轻松地创建出丰富多样的应用程序。
而这些应用程序的基础是由一些基本组件构成的。
本文将介绍 Android 应用程序的基本组件,包括活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。
活动(Activity)是 Android 应用程序的核心组件之一。
它代表了用户与应用程序之间的交互界面。
每个 Android 应用程序都至少包含一个活动,而活动可以包含多个界面元素,例如按钮、文本框、图像等。
活动通过布局文件定义了界面的外观和布局,通过代码来处理用户的操作和响应。
活动之间可以通过意图(Intent)来进行切换和通信,从而实现应用程序之间的流转和交互。
服务(Service)是在后台运行的组件,它可以在没有用户界面的情况下执行长时间运行的操作。
服务通常用于执行一些独立的任务,例如播放音乐、下载文件等。
通过在应用程序中创建服务,开发者可以在用户不可见的情况下执行一些必要的操作,并提供持久性的后台功能。
广播接收器(Broadcast Receiver)是一种用于接收系统广播消息的组件。
广播是 Android 系统中不同组件之间进行通信的一种方式,例如设备启动完成、电池电量变化等。
通过注册一个广播接收器,开发者可以监听和响应系统广播消息,并执行相应的操作。
广播接收器可以用于实现各种功能,例如接收短信、接收网络状态变化等。
内容提供器(Content Provider)是 Android 中用于共享数据的一种机制。
内容提供器允许一个应用程序将其数据暴露给其他应用程序。
通过内容提供器,不同的应用程序可以相互访问和共享数据,实现数据的交互和共用。
例如,系统提供的联系人数据库就是通过内容提供器来共享和访问联系人数据的。
Android⼤致可以分为四层架构Android 系统架构为了让你能够更好地理解 Android 系统是怎么⼯作的,我们先来看⼀下它的系统架构。
Android ⼤致可以分为四层架构:Linux 内核层、系统运⾏库层、应⽤框架层和应⽤层。
1. Linux 内核层 Android 系统是基于 Linux 内核的,这⼀层为 Android 设备的各种硬件提供了底层的驱动,如显⽰驱动、⾳频驱动、照相机驱动、蓝⽛驱动、Wi-Fi 驱动、电源管理等。
2. 系统运⾏库层这⼀层通过⼀些 C/C++库来为 Android 系统提供了主要的特性⽀持。
如 SQLite 库提供了数据库的⽀持,OpenGL|ES 库提供了 3D 绘图的⽀持,Webkit 库提供了浏览器内核的⽀持等。
同样在这⼀层还有 Android 运⾏时库,它主要提供了⼀些核⼼库,能够允许开发者使⽤ Java 语⾔来编写 Android 应⽤。
另外,Android 运⾏时库中还包含了 Dalvik 虚拟机(5.0 系统之后改为 ART 运⾏环境),它使得每⼀个 Android 应⽤都能运⾏在独⽴的进程当中,并且拥有⼀个⾃⼰的 Dalvik 虚拟机实例。
相较于 Java 虚拟机,Dalvik 是专门为移动设备定制的,它针对⼿机内存、 CPU 性能有限等情况做了优化处理。
3. 应⽤框架层这⼀层主要提供了构建应⽤程序时可能⽤到的各种 API,Android ⾃带的⼀些核⼼应⽤就是使⽤这些 API 完成的,开发者也可以通过使⽤这些 API 来构建⾃⼰的应⽤程序。
4. 应⽤层所有安装在⼿机上的应⽤程序都是属于这⼀层的,⽐如系统⾃带的联系⼈、短信等程序,或者是你从 Google Play 上下载的⼩游戏,当然还包括你⾃⼰开发的程序。
Android后台服务,Android电话服务,SMS和MMS1.Service技术1.1.Service概念及用途:Adroid中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,那我们什么时候会用到Service呢?比如我们播放音乐的时候,有可能想边听音乐边干些其他事情,当我们退出播放音乐的应用,如果不用Service,我们就听不到歌了,所以这时候就得用到Service了,又比如当我们一个应用的数据是通过网络获取的,不同时间(一段时间)的数据是不同的这时候我们可以用Service在后台定时更新,而不用每打开应用的时候在去获取。
1.2.Service的类型Service有两种类型:A.本地服务(Local Service):用于应用程序内部B.远程服务(Remote Sercie):用于android系统内部的应用程序之间本地服务用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。
远程服务可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可。
1.3.启动服务两种式:A.startService(intent):用该方式启动服务,该服务不会跟启动的应用程序绑定在一起,该服务启动完之后,应用程序终止,该服务会继续在后台运行B.bindService(intent, conn, Service.BIND_AUTO_CREATE):绑定服务,该服务会跟启动的应用程序绑定在一起,该服务启动完之后,如果应用程序终止,该服务会终止运行1.4.终止服务方式:A.由其它程序来终止服务,context.stopService(intent)或者context.unbindService(conn)B.由服务自己来终止:Service.stopSelf()或者Service.stopSelfResult(startId)1.5.Service生命周期 :Android Service的生命周期并不像Activity那么复杂,只有onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法,启动多次服务时,会调用onStart()方法多次,但onCreate()只被调用一次,无论onStart()方法调用多少次,停止服务服务只需调用一次即可而启动service,根据onStartCommand的返回值不同,有两个附加的模式:分析onStartCommand方法参数的作用和返回值的作用:1、根据这个方法的返回值不同可以有两种启动模式START_NOT_STICKY,START_STICKY,(当进程被杀死的时候,是否重新启动。
Android平台下的四大组件详解之ServicesAndroid的一个核心特性就是,一个应用程序能利用另外应用程序的元素(假如这些应用程序允许这样做)。
举个例子,如果你的程序需要展示一个可以滚动的图片列表,正好有另外一个程序已经有这样一个合适的滚动条并且也允许其他程序使用,那么你就可以使用这个滚动条来完成你的工作,而不是开发你自己的。
你的应用不需要内含其他应用的代码或者连接到他。
相反,它只是简单的启动了需要的部分。
为了让这个特性能够工作,系统必须能够实现运行一个部分组件被需要的应用,并为那个部分实例化一个Java对象。
因此,与大多数系统上的应用不一样,Android应用没有为应用中的任何部分提供一个单一的入口(比如说,没有main()函数)。
相反的,他们用系统能实例和运行的本质组件。
下面我们将介绍Android4大组件之Services服务不需要可视化的用户界面,相反在一段不确定的时间段里运行在后台。
举例,当用户在处理其他问题时,服务可以播放背景音乐,或者他可以从网上获取数据,计算,提高,提供给活动所需要的结果。
每个服务继承于服务基类。
一个基本的例子就是媒体播放器播放列表中的歌曲。
播放应用程序可能会有一个或多个活动,允许用户选择歌曲并播放它们。
但是,音乐回放不会被一个活动处理,因为用户期望音乐在他们离开这个播放程序界面后仍能播放。
为了满足这个要求,这个播放活动应该开启一个在后台运行的服务。
系统就能继续播放音乐,即使用户选择播放音乐后离开了这个界面。
可以实现连接到(绑定到)一个正在运行的服务(也可以开启一个当前没有运行的服务)。
连接之后,你可以通过系统给出的一个接口与这个服务进行通信。
对于这个音乐服务,这个借口可以允许用户去暂停,倒退,停止,重放和回放。
就像活动和其他的组件,服务运行在应用程序进程中的主线程中。
因此,他们不会阻塞到其他组件或者用户界面,服务通常会生成其他线程用来做那些耗时间的任务(就像音乐播放一样)。
Android系统架构及内核简介(来源于ThinkPHP)Android是Google公司开发的基于Linux平台的开源⼿机操作系统,它包括操作系统、中间件、⽤户界⾯和应⽤程序,⽽且不存在任何以往阻碍移动产业创新的专利权障碍,并由Google公司于2007年11⽉5⽇正式发布。
同时,Google公司组建了⼀个开放⼿机联盟,这个联盟由中国移动、摩托罗拉、⾼通、宏达电和T-Mobile等在内的全球30多家技术和⽆线应⽤的领军企业组成,Google通过与运营商、设备制造商、开发商和其他有关各⽅结成深层次的合作伙伴关系,希望借助建⽴标准化、开放式的移动电话软件平台,在移动产业内形成⼀个开放式的⽣态系统;可预见地,⽣产和使⽤基于 Android系统的嵌⼊式⼿持移动设备将是未来的发展趋势,对相应软件的需求量也将⽇趋增长,因此对Android系统内部作⼀个完整和深⼊的分析,对基于Android平台的软件移植和开发是很有益处的。
1 Android系统平台架构对操作系统⽽⾔,必须做到设计合理、层次分明,同时还需考虑整个系统的结构要聚耦适当,Android系统是基于linux内核的,因此还必须具备开源的特性,以符合开源⼈员共同⼯作。
从系统的组成要件来讲,Android平台架构包括硬件设备、板级⽀持包、驱动程序、操作系统内核、程序运⾏库,运⾏框架,应⽤程序等,它们的有机结合和协同⼯作共同完成了整个系统的正常运⾏和对事务的处理。
依据Google开源资料可知,整个系统由Linux内核、程序库、Android Runtime、应⽤程序框架和应⽤程序等5部分组成,,系统架构如图1所⽰。
参照图1,由上⽽下对组成系统各部分的主要组件作以下描述。
1.1 Linux内核Android基于Linux 2.6内核,但并⾮完全照搬内核,⽽是对内核作了部分增删和修改,在Linux 2.6内核的基础上,Android核⼼系统实现了安全性、内存管理、进程管理、⽹络协议栈和驱动模型等功能,Linux内核也同时作为硬件和软件栈之间的抽象层。
Android开发四⼤组件概述这个⽂章主要是讲Android开发的四⼤组件,本⽂主要分为⼀、Activity具体解释⼆、Service具体解释三、Broadcast Receiver具体解释四、Content Provider具体解释外加⼀个重要组件 intent的具体解释。
(主要来⾃于⽹络)1、Activity⼀个Activity通常展现为⼀个可视化的⽤户界⾯。
⽐如,⼀个activity可能展现为⼀个⽤户能够选择的菜单项列表或者展现⼀些图⽚以及图⽚的标题。
⼀个消息服务应⽤程序可能包括⼀个显⽰联系⼈列表的activity,⼀个编写信息的activity,以及其他⼀些查看信息和改动应⽤程序设置的activity。
尽管这些activity⼀起⼯作,共同组成了⼀个应⽤程序,但每个activity都是相对独⽴的。
每个activity都是Activity(android.app.Activity)的⼦类。
⼀个应⽤程序可能仅仅包括⼀个activity,或者像上⾯提到的消息服务程序⼀样有多个activity。
⼀个应⽤程序包括⼏个activity以及各个activity完毕什么样的功能全然取决于应⽤程序以及它的设计。
通常每⼀个应⽤程序都包括⼀个在应⽤程序启动后第⼀个展现给⽤户的 activity。
在当前展现给⽤户的activity中启动⼀个新的activity,能够实现从⼀个activity转换到另外⼀个 activity。
每⼀个activity都会有⼀个⽤于绘制⽤户界⾯的窗体。
通常这样⼀个窗体会填充整个屏幕,当然这个窗体也能够⽐屏幕⼩并漂浮在其它窗体之上。
activity还能够使⽤⼀些额外的窗体,⽐如⼀个要求⽤户响应的弹出式对话框,或者是当⽤户在屏幕上选择⼀个条⽬后向⽤户展现⼀些重要信息的窗体。
展⽰activity窗体的可视化内容区域是⼀些具有层次关系(⾮常像数据结构中的树)的视图,⽽视图则是由类View的⼦类表⽰的。
以上面三种方式启动的服务其生命周期也有区别,将在随后给出。
2、Service 与Thread 的区别很多时候,你可能会问,为什么要用Service,而不用Thread 呢,因为用Thread 是很方便的,比起Service 也方便多了,下面我详细的来解释一下。
1). Thread:Thread 是程序执行的最小单元,它是分配CPU的基本单位。
可以用Thread 来执行一些异步的操作。
2). Service:Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的Service 是运行在主进程的main 线程上的。
如:onCreate,onStart 这些函数在被系统调用的时候都是在主进程的main 线程上运行的。
如果是Remote Service,那么对应的Service 则是运行在独立进程的main 线程上。
因此请不要把Service 理解成线程,它跟线程半毛钱的关系都没有!既然这样,那么我们为什么要用Service 呢?其实这跟android 的系统机制有关,我们先拿Thread 来说。
Thread 的运行是独立于Activity 的,也就是说当一个Activity 被finish 之后,如果你没有主动停止Thread 或者Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行。
因此这里会出现一个问题:当Activity 被finish 之后,你不再持有该Thread 的引用。
另一方面,你没有办法在不同的Activity 中对同一Thread 进行控制。
举个例子:如果你的Thread 需要不停地隔一段时间就要连接服务器做某种同步的话,该Thread 需要在Activity 没有start的时候也在运行。
这个时候当你start 一个Activity 就没有办法在该Activity 里面控制之前创建的Thread。
因此你便需要创建并启动一个Service ,在Service 里面创建、运行并控制该Thread,这样便解决了该问题(因为任何Activity 都可以控制同一Service,而系统也只会创建一个对应Service 的实例)。
Android的系统架构Android的系统架构和其它操作系统一样,采用了分层的架构。
android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android 应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。
在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如:python、lua、tcl、php等等),还有其他诸如:Qt(qt for android)、Mono(mono for android)等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C#作为编程语言来开发应用程序。
另外,谷歌还在2009年特别发布了针对初学者的Android Simple 语言,该语言类似Basic语言。
而在网页编程语言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发。
而在Android系统底层方面,Android使用C/C++作为开发语言。
应用程序(部分)早期的Android应用程序开发,通常通过Android SDK(Android软件开发包)下使用Java作为编程语言来开发应用程序,但通过不同的软件开发包,则使用的编程语言也不同。
例如开发者可以通过Android NDK(Android Native开发包)使用C语言或者C++语言来作为编程语言开发应用程序。
同时谷歌还推出了适合初学者编程使用的Simple语言,该语言类似微软公司的Visual Basic语言。
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。
Activity :应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
Activity之间通过Intent进行通信。
在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。
BroadcastReceive广播接收器:你的应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。
广播接收器没有用户界面。
然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager 来通知用户。
通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。
一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
Service 服务:一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。
比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。
在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。
然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。
在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。
同时,系统也将保持这个service 一直执行,直到这个service 运行结束。
另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。
当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。
能够删除的安卓(Android)系统自带程序详细列表和说明本文来自: XDA智能手机网详细文章参考:/thread-9950288-1-1.htmlAndroid手机系统中默认会自带很多无用程序,这些应用,平时很少用不到,但因为是系统自带的,所以它们像牛皮癣一样内嵌在手机里,无法去除。
下面列举一些能够删除和不能够删除的软件列表,希望对G友有用!怎么删除呢?当然是下载一个Root Explorer来删除(需要ROOT)自带的软件列表:*AccountAndSyncSettings.apk 同步与帐户设定(绝不能删除)-ADWLauncher.apk ADW桌面程序可删除用别的桌面可替代-Androidian.apk 主题文件可删除-AndroidTerm.apk 终端模拟器可删除*ApplicationsProvider.apk 应用程序支持服务(绝不能删除)Bluetooth.apk 蓝牙(删除后蓝牙功能消失)Browser.apk 系统自带浏览器(可用其他手机浏览器替代)Calculator.apk 计算器(可删,可用其他替代)Calendar.apk 日历(可删)CalendarProvider.apk 日历程序支持服务(可删)*Camera.apk 自带相机(可删,用第三方软件替代)*CertInstaller.apk 证书服务(绝不能删除)Contacts.apk 通讯录/联系人(通讯录的可删)*ContactsProvider.apk 通讯录/联系人数据存储服务(绝不能删除)-CMParts.apk CM设置保留-CMScreenshot.apk CM截图可删-CMStats.apk cm匿名统计可删-CMUpdateNotify.apk CM更新通知可删-CMWallpapers.apk CM自带壁纸可删除*DefaultContainerService.apk 默认通讯录服务(绝不能删除)DeskClock.apk 自带闹钟(用第三方闹钟的可删)*DownloadProvider.apk 下载管理器(绝不能删除)*DrmProvider.apk DRM受保护数据存储服务(绝不能删除)DSPManager.apk DSP音频管理(可删)Email.apk Email(不用自带Email接受邮件的可删)FileManager.apk 简易文件管理器(可删,可用ES文件管理器替代)Gallery3D.apk 3D图片浏览器(可删)GenieWidget.apk 天气与新闻(可删)Gmail.apk Gmail(可删)GoogleBackupTransport.apk ***(未知程序,可删)GoogleCalendarSyncAdapter.apk 存储日历信息(可删)GoogleContactsSyncAdapter.apk 存储联系人信息(可删)GoogleFeedback.apk ***(据说删除后开机会提示GoogleFeedback.apk,根据自身情况决定是否删除)GooglePartnerSetup.apk Google助手(可删)GooglePinyinIME.apk Google拼音(可删,用其他输入法替代)GoogleQuickSearchBox.apk 谷歌搜索(可删)GoogleServicesFramework.apk 同步支持服务(删除后无法同步联系人,且不能登录Google)HTMLViewer.apk HTML浏览器(可删)kickback.apk 辅助功能LauncherPro.apk 原生桌面(可删)LiveWall**sPicker.apk 动态壁纸(可删)Maps.apk Google地图(可删)MarketUpdater.apk 市场升级(不确定)*MediaProvider.apk 媒体数据存储服务(绝不能删除)MediaUploader.apk 媒体升级(可删)Mms.apk 自带信息(可删)Music.apk 自带音乐(可删,用自己喜欢的播放器吧)Networklocetion.apk 网络位置(可删)OneTimeInitializer.apk ***(未知,可删)-Pacman.apk 软件包管理器不知道何用可保留*PackageInstaller.apk 程序安装(绝不能删除)*Phone.apk 电话拨号程序(绝不能删除)PhoneGuard.apk 拨号卫士(可删)PicoTts.apk 可删(文字语言转换的语音合成引擎,设置-语音输入与输出中)Protips.apk 桌面小绿人插件(可删)*QuickMgr.apk 一键设置(长按menu的后弹出的那个,绝不能删除)*Settings.apk 系统设置(绝不能删除)*SettingsProvider.apk 设置服务程序(绝不能删除)*SetupWizard.apk 开机引导(在定制Rom时不可删,刷好机可用Root Explorer删掉) SMSPopup.apk 短信泡泡(就是短信来时弹出的那个,其实就是个弹出框架)soundback.apk 辅助功能(可删)SoundRecorder.apk 录音机(可用第三方录音软件替代)Stk.apk SIM卡服务(可删,有机友把联系人复制在SIM卡上的就不要删它)Street.apk 街道(可删)*Superuser.apk 授权程序(就是程序列表上面那个,用这个来获取Root的)Talk.apk 系统服务项(可删)talkback.apk 辅助功能(可删)*TelephonyProvider.apk 拨号记录存储服务(绝不能删除)Term.apk 超级终端(可删,不过不建议,可以用来刷Recovery)TtsService.apk Text-to-speech服务(可删)Updater.apk 在线升级(可删)UserDictionaryProvider.apk 用户数据字典服务(可删)Vending.apk 电子市场(可删)VoiceSearch.apk 语音搜索(可删)注意:1. 有*号是绝不可删的;2. 删除系统自带程序前,请注意备份;3. 因不同版本的Android系统会有差异导致系统自带程序列表有差异,但大体上一致,请大家自己斟酌。
AndroidService服务AndroidService服务(一)--Service一、Service简介Service是android系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和其他组件进行交互。service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在后台的。Service的启动有两种方式:context.startService()和context.bindService()
二、Service启动流程context.startService()启动流程:context.startService()->onCreate()->onStart()->Servicerunning->context.stopService()->onDestroy()->Servicestop如果Service还没有运行,则android先调用onCreate(),然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。如果stopService的时候会直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行,该Service的调用者再启动起来后可以通过stopService关闭Service。所以调用startService的生命周期为:onCreate-->onStart(可多次调用)-->onDestroycontext.bindService()启动流程:context.bindService()->onCreate()->onBind()->Servicerunning->onUnbind()->onDestroy()->ServicestoponBind()将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service的实例、运行状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。所以调用bindService的生命周期为:onCreate-->onBind(只一次,不可多次绑定)-->onUnbind-->onDestory。在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。三、Service生命周期Service的生命周期并不像Activity那么复杂,它只继承了onCreate()、onStart()、onDestroy()三个方法当我们第一次启动Service时,先后调用了onCreate()、onStart()这两个方法;当停止Service时,则执行onDestroy()方法。这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。它可以通过Service.stopSelf()方法或者Service.stopSelfResult()方法来停止自己,只要调用一次stopService()方法便可以停止服务,无论调用了多少次的启动服务方法。
Android系统介绍1. 什么是androidAndroid是移动设备的软件堆层(software stack,又名以软件叠层),包括操作系统,中间件和关键应用。
Android 架构(google)Android架构(高通)Android代码结构介绍:版本:2.2.1平台:高通7X27Build ID: M76xxTSNCJNLYA70301Bionic 是一个C库的目录Build 是编译文件的目录,包括编译选项,和环境变量的设置。
Dalvik是android的java虚拟机的源码目录,对于Android的Java应用程序来说,每一个应用对对应于一个独立的Dalvik虚拟机实例进程,当然每个Android Java应用程序的线程也对应于一个Linux线程。
这相当于每个Android Dalvik应用程序都运行在自己的沙盒里面从而保证Dalvik应用程序的安全性。
当然Android系统也充分利用了这个特性,每个Android Dalvik应用程序都被赋予了一个独立的Linux PID(app_*)。
Development是配合开发android源码的一些工具和如何使用window,mac,linux等系统的工具的介绍的目录。
External 还是一些扩展库。
Framework 是android的核心框架,提供了很多上层使用的api和服务。
这个部分是android平台的基础。
Android的应用程序框架为应用程序层的开发者提供APIs,它实际上是一个应用程序的框架。
由于上层的应用程序是以JAVA构建的,因此本层次提供的首先包含了UI程序中所需要的各种控件:例如: Views (视图组件)包括 lists(列表), grids(栅格), text boxes(文本框), buttons(按钮)等。
甚至一个嵌入式的Web浏览器。
一个Andoid的应用程序可以利用应用程序框架中的以下几个部分:Activity (活动)具有可视 UI 的应用程序是用活动实现的。
Android 服务和广播接收器Android平台提供了许多组件来支持应用程序的开发,其中包括服务和广播接收器。
服务是一种可以在后台执行长时间运行任务的组件,而广播接收器则用于接收系统和应用程序之间的通知。
本文将深入探讨Android服务和广播接收器的用途、工作原理以及如何使用它们。
一、Android服务Android服务是一种可以在后台独立运行的组件,没有用户界面。
它可以执行长时间运行的操作,如播放音乐、下载文件或处理网络请求。
服务可以与其他组件(如活动或广播接收器)进行交互,通过Intent来启动和停止服务。
1. 服务的创建和启动要创建一个服务,需要继承Android提供的Service类,并实现onCreate()和onStartCommand()方法。
onCreate()方法在服务创建时调用,而onStartCommand()方法会在服务启动时被调用。
在onStartCommand()方法中,可以执行后台任务,并通过return语句指定服务的行为,如START_STICKY表示在服务被杀死后自动重启。
2. 与服务进行通信为了与服务进行通信,可以使用bindService()方法来绑定服务。
通过bindService()方法,可以获取到服务的实例,并与其进行交互。
此外,还可以使用Messenger或AIDL来进行进程间通信,实现跨进程的服务通信。
二、广播接收器广播接收器是一种用于接收系统和应用程序之间通知的组件。
它可以监听系统广播事件(如网络状态变化、电池电量改变等),也可以接收自定义广播事件。
通过广播接收器,可以实现在特定事件发生时执行相应的操作。
1. 广播接收器的注册和使用要使用广播接收器,首先需要在AndroidManifest.xml文件中声明接收器,并为其指定一个合适的Intent过滤器。
接着,在代码中注册广播接收器,并在接收器中实现相应的逻辑。
可以通过系统发送广播或自定义广播来触发接收器的执行。
Android的四⼤组件Android的四⼤组件:Activity、Service、BroadcastReceiver、Content Provider。
Content Provider 属于Android应⽤程序的组件之⼀,作为应⽤程序之间唯⼀的共享数据的途径,Content Provider 主要的功能就是存储并检索数据以及向其他应⽤程序提供访问数据的接⼝① Activity是Android应⽤中负责与⽤户交互的组件——⼤致上把它想象成Swing编程中的JFrame控件。
不过它与JFrame的区别在于:JFrame本⾝可以设置布局管理器,不断地向JFrame中添加组件,但Activity只能通过setContentView(View)来显⽰指定组件。
Activity为Android应⽤提供⾥可视化⽤户界⾯,如果该Android应⽤需要多个⽤户界⾯,那么这个Android应⽤将会包含多个Activity,多个Activity组成Activity栈。
当前活动的Activity位于栈顶。
View组件是所有UI控件、容器控件的基类,View组件就是Android应⽤中⽤户实实在在看到的部分。
但View组件需要放到容器组件中,或者使⽤Activity将它显⽰出来。
如果需要通过某个Activity把指定View显⽰出来,调⽤Activity的setContentView()⽅法即可。
② Service与Activity的地位是并列的,它也代表⼀个单独的Android组件。
Service与Activity的区别在于:Service通常位于后台运⾏,它⼀般不需要与⽤户交互,因此Service组件没有图形⽤户界⾯。
Service组件需要继承Service基类。
⼀个Service组件被运⾏起来之后,它将拥有⾃⼰独⽴的⽣命周期,Service组件通常⽤于为其他组件提供后台服务或监控其他组件的运⾏状态。
③ BroadcastReceiver是Android应⽤中另⼀个重要的组件,BroadcastReceiver代表⼴播消息接收器。
Android的系统服务一览
System_Server进程
运行在system server进程中的服务比较多,这是整个android框架的基础
Native服务
SurfaceFlinger
这是framebuffer合成的服务,将各个应用程序及应用程序中的逻辑窗口图像数据(surface)合成到一个物理窗口中显示(framebuffer)的服务程序
Java服务:
这部分的服务大部分都有一个供应用进程使用的manager类,这就是一个RPC 调用,用户通过调用xxxManager的方法,实际上被Binder给迁移到system_server 进程中对应的xxxManagerService中对应的方法,并将结果再通过binder带回。
1. EntropyService
熵服务,周期性的加载和保存随机信息。
主要是linux开机后,/dev/random的状态可能是可预知的,这样一些需要随机信息的应用程序就可能会有问题。
这个无需提供应用程序接口。
2. PowerManagerService –> PowerManager
Android 的电源管理也是很重要的一部分。
比如在待机的时候关掉不用的设备,待机时屏幕和键盘背光的关闭,用户操作的时候该打开多少设备等等。
3. ActivityManagerService->ActivityManager
这个是整个Android framework框架中最为核心的一个服务,管理整个框架中任务、进程管理, Intent解析等的核心实现。
虽然名为Activity的Manager
Service,但它管辖的范围,不只是Activity,还有其他三大组件,和它们所在的进程。
也就是说用户应用程序的生命管理,都是由他负责的。
4. TelephonyRegistry->TelephonyManager
电话注册、管理服务模块,可以获取电话的链接状态、信号强度等等。
<可以删掉,但要看的大概明白>
5. PackageManagerService -> PackageManager
包括对软件包的解包,验证,安装以及升级等等,对于我们现在不能安装.so文件的问题,应该先从这块着手分析原因。
6. AccountManagerService -> AccountManager
A system service that provides account, password, and authtoken management for all
accounts on the device。
7. ContentService -> ContentResolver
内容服务,主要是数据库等提供解决方法的服务。
8. BatteryService
监控电池充电及状态的服务,当状态改变时,会广播Intent
9. HardwareService
一般是ring和vibrate的服务程序
10. SensorService -> SensorManager
管理Sensor设备的服务,负责注册client设备及当client需要使用sensor时激活Sensor
11. WindowManagerService -> WindowManager -> PhoneWindowManager
和ActivityManagerService高度粘合
窗口管理,这里最核心的就是输入事件的分发和管理。
12. AlarmManagerService -> AlarmManager
闹钟服务程序
13. BluetoothService -> BluetoothDevice
蓝牙的后台管理和服务程序
14. StatusBarService -> StatusBarManager
负责statusBar上图标的更新、动画等等的服务,服务不大。
15. ClipboardService -> ClipboardManager
和其他系统的clipBoard服务类似,提供复制黏贴功过。
16. InputMethodManagerService -> InputMethodManager
输入法的管理服务程序,包括何时使能输入法,切换输入法等等。
17. NetStatService
手机网络服务
18. ConnectivityService -> ConnectivityManager
网络连接状态服务,可供其他应用查询,当网络状态变化时,也可广播改变。
19. AccessibilityManagerService-> AccessibilityManager
这块可能要仔细看一下,主要是一些View获得点击、焦点、文字改变等事件的分发管理,对整个系统的调试、问题定位等,也需要最这个服务仔细过目一下。
20. NotificationManagerService -> NotificationManager
负责管理和通知后台事件的发生等,这个和statusbar胶黏在一起,一般会在statusbar上添加响应图标。
用户可以通过这知道系统后台发生了什么事情。
21. MountService
磁盘加载服务程序,一般要和一个linux daemon程序如vold/mountd等合作起作用,主要负责监听并广播device的mount/unmount/bad removal等等事件。
22. DeviceStorageMonitorService
监控磁盘空间的服务,当磁盘空间不足10%的时候会给用户警告
23. LocationManagerService -> LocationManager
要加入GPS服务等,这部分要细看,现在应用中的navigation没响应,可以从此处着手看一下
24. SearchManagerService -> SearchManager
The search manager service handles the search UI, and maintains a registry of searchable activities.
25. Checkin Service(FallbackCheckinService)
貌似checkin service是google提供的包,没有源代码,源码只有fallbackCheckinService
26. WallpaperManagerService -> WallpaperManager
管理桌面背景的服务,深度定制化桌面系统,需要看懂并扩展<同时要兼容>这部分
27. AudioService -> AudioManager
AudioFlinger的上层管理封装,主要是音量、音效、声道及铃声等的管理
28. HeadsetObserver
耳机插拔事件的监控小循环
29. DockObserver
如果系统有个座子,当手机装上或拔出这个座子的话,就得靠他来管理了
30. BackupManagerService -> BackupManager
备份服务
31. AppWidgetService -> AppWidgetManager
Android可以让用户写的程序以widget的方式放在桌面上,这就是这套管理和服务的接口
32. StatusBarPolicy
管理哪个图标该在status bar上显示的策略。
mediaServer服务进程
MediaServer服务基本上都是native的services,mediaServer进程也是在init.rc 中启动的,它不是一个daemon进程,这点容易搞混。
他也是和systemserver进程类似的系统服务进程,提供应用进程的RPC调用的真正服务代码所运行的位置。
其服务都是和媒体录播放有关,主要有三个服务:
AudioFlinger
声音的录播放服务,包括混音等
MediaPlayerService
提供媒体播放服务,opencore是这块的核心模块,对java端的接口在mediaplayer.java
CameraService
提供camera的录制、preview等功能的服务
AudioPolicyService
主要功能有检查输入输出设备的连接状态及系统的音频策略的切换等。