Android平台架构及特性

安卓讲课笔记1.4 安卓平台架构 1. 了解安卓平台架构 2. 熟悉安卓设备文件浏览器 3. 会使用安卓调试桥 阅读详情

1.概述

Android系统的底层建立在Linux系统之上,采用软件叠层(software stack,使得层与层之间相互分离)的方式进行构建。其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA application framework,所有的应用程序都是基于Java的application framework之上。

2.Android系统的体系结构

Android运行时由两部分组成:Android核心库集和Dalvik虚拟机。其中核心库集提供了Java语言核心库所能使用的绝大部分功能,而虚拟机则负责运行Android应用程序。每个Android应用程序都运行在单独的Dalvik虚拟机内。

3.activity生命周期流程图


onCreate(Bundle savedInstanceState):创建activity时调用,还以Bundle的形式提供对以前存储的任何状态的访问。

onStart():activity变为在屏幕上对用户可见时调用。

onResume():activity开始与用户交互时调用。

onPause():activity被暂停或收回CPU和其他资源时调用,该方法用于保存活动状态的。

onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用。

onRestart():重新启动activity时被调用。该活动仍在栈中,而不是启动新的活动。

onDestroy():activity被完全从系统内存中移除时调用。

4.android与ios运行机制上有哪些不同?

(1)ios是“伪后台”,所谓的“后台驻留”并不是指“执行中的程序”,而是“最近使用过的程序”。如果你一个一个去清楚“后台驻留”的程序,就像是一笔一笔删除浏览记录中的项目一样,是没有太大意义的。一般来说,在你按下Home键后,本来的程式就会退到背景,如果它有额外的背景执行作业,超过10分钟还是会被ios中止。ios只给一部分进程留有后台运行权限,比如音乐播放之类的。苹果一直只能有一个程序在工作,其他的都会停掉,所以非常流畅(其他特殊的进程在后台跑的)。虽然说程序被停了,但是,程序并没有在内存中释放,而是继续放在内存中,这样带来的好处就是你再次打开程序的时候,会回复到你之前关闭程序的界面,程序快速的继续运行。那么,当内存中程序太多了,内存不够的时候怎么办?当内存不足的时候,iOS会依据自身判断出程序的优先级,之后清理程序占用的内存。比如音乐,应该就属于是优先级比较高的程序。iOS根据优先级,和使用次数来决定哪些程序首先清出后台。不只是简单的看时间。将程序踢出内存,就是所谓的挂起。从而释放内存,供新打开的程序使用。当然,以前一直被苹果用户给诟病的就是QQ不能挂后台,一按Home键就掉线就是这个原因(当然,苹果通过推送来解决这个问题)。

android有前台运行和后台运行之说,当你把一个程序放到后台,他是活动的,跟在前台没有区别。而且还有些系统的服务一直在运行。android大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系。如果你知道java,就能更清楚这机制了。其实和java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动应用的速度。这本来就是android标榜的优势之一,如果人为去关闭进程,没有太大必要。特别是自动关进程的软件。 到这里有人会说了,那为什么内存少的时候运行大型程序会慢呢?其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。所以,论坛上有个更改内存阀值的程序可以有一定改善。 但改动也可能带来一些问题,取决于值的设定。 那么,进程管理软件有无必要呢?有的。就是在运行大型程序之前,你可以手动关闭一些进程释放内存,可以显著的提高运行速度。但一些小程序,完全可交由系统自己管理。谈到这里,可能有的朋友会问,如果不关程序是不是会更耗电。我就说说 android后台的原理,你就明白了。android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。所以为什么有的程序切出去重进会到主界面。但是,一个程序如果想要在后台处理些东西,如音乐播放,它就会开启一个服务。服务可在后台持续运行,所以在后台耗电的也只有带服务的应用了。这个在进程管理软件里能看到,标签是service。至于广播什么的我就不涉及了。所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源,何必要关掉他们抹杀这个android的优点呢? 还有一个。为什么android一个应用看起来那么耗内存。大家知道,android上的应用是java,当然需要虚拟机,而android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。 以上这些设计确保了android的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃,也永远没有内存不足的提示出现。大家可能是被windows毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,很没必要。大家不妨按我说的习惯来用用这个系统。

总结

①后台程序的运行状态

IOS:分三类应用,大部分应用切换到后台会停止运行,部分应用(音乐、voip)在任务完成后也会停止,后台应用不耗cpu,但应用内存保持占用状态

Android:切换后台后应用进入onstop()状态,不是真正停止,这种状态下也不消耗cpu,部分Android应用自带后台服务,后台服务不会停止,需要消耗CPU,应用内存都会保持占用状态

②后台应用内存管理

IOS:后台应用内存保持,在新开启应用申请内存时会有一套完善机制(重要性、打开次数等)确定回收哪些应用的内存,并为新开启的应用分配足够的内存;

Android:设置内存阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略十分消耗系统资源;每一个android都运行在一个虚拟机中,所以更耗内存

5.android四大组件

Android四大组件分别为activity、service、content provider、broadcast receiver。

5.1 activity

(1)一个Activity通常就是一个单独的屏幕(窗口)。

(2)Activity之间通过Intent进行通信。

(3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。

5.2 service

(1)service用于在后台完成用户指定的操作。service分为两种:

(a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。

(b)bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。

(2)startService()与bindService()区别:

(a)started service(启动服务)是由其他组件调用startService()方法启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。

(b)使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。

(3)开发人员需要在应用程序配置文件中声明全部的service,使用<service></service>标签。

(4)Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。

5.3 content provider

(1)android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。

(2)只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。

(3)ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。

(4)开发人员不会直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作。

(5)ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。

5.4 broadcast receiver

(1)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。

(3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。

5.4 android四大组件总结:

(1)4大组件的注册

4大基本组件都需要注册才能使用,每个Activity、service、Content Provider都需要在AndroidManifest文件中进行配置。AndroidManifest文件中未进行声明的activity、服务以及内容提供者将不为系统所见,从而也就不可用。而broadcast receiver广播接收者的注册分静态注册(在AndroidManifest文件中进行配置)和通过代码动态创建并以调用Context.registerReceiver()的方式注册至系统。需要注意的是在AndroidManifest文件中进行配置的广播接收者会随系统的启动而一直处于活跃状态,只要接收到感兴趣的广播就会触发(即使程序未运行)。

(2)4大组件的激活

内容提供者的激活:当接收到ContentResolver发出的请求后,内容提供者被激活。而其它三种组件activity、服务和广播接收器被一种叫做intent的异步消息所激活。

(3)4大组件的关闭

内容提供者仅在响应ContentResolver提出请求的时候激活。而一个广播接收器仅在响应广播信息的时候激活。所以,没有必要去显式的关闭这些组件。Activity关闭:可以通过调用它的finish()方法来关闭一个activity。服务关闭:对于通过startService()方法启动的服务要调用Context.stopService()方法关闭服务,使用bindService()方法启动的服务要调用Contex.unbindService()方法关闭服务。

(4)android中的任务(activity栈)

(a)任务其实就是activity的栈,它由一个或多个Activity组成,共同完成一个完整的用户体验。栈底的是启动整个任务的Activity,栈顶的是当前运行的用户可以交互的Activity,当一个activity启动另外一个的时候,新的activity就被压入栈,并成为当前运行的activity。而前一个activity仍保持在栈之中。当用户按下BACK键的时候,当前activity出栈,而前一个恢复为当前运行的activity。栈中保存的其实是对象,栈中的Activity永远不会重排,只会压入或弹出。

(b)任务中的所有activity是作为一个整体进行移动的。整个的任务(即activity栈)可以移到前台,或退至后台。

(c)Android系统是一个多任务(Multi-Task)的操作系统,可以在用手机听音乐的同时,也执行其他多个程序。每多执行一个应用程序,就会多耗费一些系统内存,当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统就会觉得越来越慢,甚至不稳定。为了解决这个问题,Android引入了一个新的机制,即生命周期(Life Cycle)。
参考: http://blog.youkuaiyun.com/ican87/article/details/21874321


QT+SOEM主站协议库实战指南—从编译到嵌入式应用 本文提供了一份QT与SOEM开源EtherCAT主站协议库的集成实战指南。详细介绍了在Windows和Linux平台下编译SOEM库的步骤,并讲解了如何将其无缝集成到QT项目中,构建具备实时监控与控制功能的工业上位机应用。内容涵盖从环境搭建、核心协议开发到嵌入式部署与优化的全流程,为开发高性价比、自主可控的工业控制解决方案提供完整路径。 阅读详情

相关推荐

适合初学者的ROS机器人教程(1): Ubuntu下ROS创建自己的包和使用github下载的包

ROS如何创建自己的包 1. 首先创建catkin工作空间(如果你以及有了请忽略) $ mkdir catkin_ws # 创建一个文件夹里面计划放我们的项目,ws是workspace的缩写 $ cd catkin_ws # 将当前工作文件夹切换到catkin_ws这个文件夹 ~/catkin_ws$ catkin_make # 执行catkin_make创建一ROS项目 此时你的catkin_...

@司南牧|知乎|博客|易懂教程|李韬 3244

Android系统架构 四大组件

为什么80%的码农都做不了架构师?>>> ...

weixin_34365635的博客 299

MATLAB实战:从零推导合成孔径雷达(SAR)后向投影(BP)算法核心公式与代码实现

本文详细介绍了如何使用MATLAB从零推导合成孔径雷达(SAR)后向投影(BP)算法的核心公式与代码实现。通过基础概念讲解、数学原理推导、距离维脉冲压缩实现及完整MATLAB代码展示,帮助读者掌握SAR成像的关键技术。特别针对BP算法的优化技巧和常见问题提供了实用解决方案,适合雷达信号处理领域的开发者和研究者参考。

weixin_28683689的博客 251

Android学习笔记之Android平台架构和特性

一.Android的平台架构及特性 Android系统的底层建立在Linux系统之上,该平台由操作系统,中间件,用户界面和应用软件4层组成。采用一种被称为软件叠层的方式进行构建。 1.应用程序层(System Apps) Android系统将会包含一系列的核心应用程序,包括电子邮件客户端,SMS程序,日历,地图,浏览器,联系人等,这些应用程序通常都是用Java编写的。 2.应用程序框架(Java API Framework) Java 语言编写的 API 使用 Android OS 的整个功能集。这些 A

Danny_llp的博客 3023

别再傻傻分不清PBR和NPR了!从《原神》到《双城之战》,聊聊游戏里那些让你眼前一亮的渲染风格

本文深入解析了PBR(基于物理的渲染)与NPR(非真实感渲染)在游戏视觉风格中的应用差异,通过《原神》和《双城之战》的案例,展示了两种渲染技术如何创造出截然不同的艺术效果。从技术原理到实战案例,帮助读者理解如何根据项目需求选择合适的渲染风格。

weixin_30425949的博客 146

从波形到代码:手把手调试GaN图腾柱PFC的过零点切换与软启动策略

本文详细解析了GaN图腾柱无桥Boost PFC电路在过零点切换与软启动策略中的调试方法。通过波形分析、代码实现和寄存器配置,提供了解决误开通、震荡波形等问题的实用方案,帮助工程师优化电源设计效率与可靠性。

weixin_30831529的博客 424

架构,平台,框架的区别和联系

不同的平台可能具有不同的硬件特性和操作系统约束,因此软件需要根据特定平台进行适配和优化。平台提供了软件与底层硬件和操作系统之间的接口,使得软件能够与特定的硬件和操作系统协同工作。- 架构:在软件开发中,架构是指软件的整体设计和组织方式。架构定义了系统的高级结构和组织方式,以及各个组件之间的关系和交互方式。- 平台示例:假设我们要在Windows操作系统上开发一个图形界面的应用程序,可以使用Python的Tkinter库作为GUI框架,并利用PyInstaller将程序打包成可执行文件。

sunny 4590

Ubuntu断网环境下的系统更新:apt-offline保姆级教程(附常见问题排查)

本文详细介绍了在Ubuntu断网环境下使用apt-offline进行系统更新的完整教程,包括环境准备、签名文件生成、数据传输方案对比及常见问题排查。特别适用于企业级开发环境或安全敏感场景,帮助运维人员高效完成离线系统更新,确保系统安全与稳定。

weixin_29214691的博客 359

1.1Android基础--系统特性与平台架构

文章目录前言一、系统特性二、平台架构1.平台架构图2.架构的简单理解总结 前言 Android是由Google公司和开放手机联盟领导并开发的一种基于Linux的自由且开放源代码的操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,主要使用于移动设备。(来源:搜狗百科) 一、系统特性 应用程序框架支持组件(四大组件+Intent组件)的重用与替换。 Dalvik虚拟机专门为移动设备优化集成的浏览器,开源的WebKit引擎。 特点:不需要很快的CPU计算速度和大量的内存空间;而每个App都单独地运

weixin_45874668的博客 1688

Transformers 实战修炼与源码剖析专栏大纲

本专栏以 Hugging Face Transformers 为主线,围绕“能用、会调、敢上线、懂源码”四个目标展开。内容不把理论堆成公式墙,而是用真实或拟真的业务场景驱动:客服分类、合同抽取、知识库问答、模型微调、推理服务、监控告警、源码扩展等。采用“业务痛点 → 三人剧本对话 → 代码实战 → 总结思考”的四段式结构,让读者在动手完成一个个小项目的过程中,逐步理解 Tokenizer、Model、Pipeline、Trainer、Generation、PEFT、Accelerate、Serving等概念

davidwang456的专栏 922

【SOUND】Linux音频子系统ASoC的驱动框架总分析

ALSA系统在芯片(ASoC)层的总体项目目标是为嵌入式芯片处理器(例如PXA2XX,AU1X00,IMX等)和便携式音频编解码器提供更好的ALSA支持。 在进入ASoC子系统之前,内核对SoC音频有一些支持,但是它有一些局限性:ASoC层旨在解决这些问题并提供以下内容特征 :为了实现这一切,ASoC基本上将嵌入式音频系统分为多个可重复使用的组件驱动程序:另外,这里提下OSS(Open Sound System)这个基本被弃用的音频框架。 可以参考Linux OSS架构声卡驱动框架 2.3 ASoC重要

wang 恒 的博客 1781

Android的平台架构及特性

Android平台采用了整合的策略思想,包括底层Linux操作系统、中间层的中间件和上层的Java应用程序。下面我把Android的特性及其架构体系结构总结一下。 一、Android的平台特性   Android平台有如下特性:   1. 应用程序框架支持组件的重用与替换。   这样我们可以把系统中不喜欢的应用程序删除,安装我们喜欢的应用程序。   2. Dalvik虚拟机专门为移...

shikun520的专栏 299

Python爬虫实战:使用最新技术爬取GitHub Trending项目

本文将详细介绍如何使用Python最新技术栈构建一个高效的GitHub Trending爬虫。我们将使用异步请求库httpx、HTML解析库parsel、数据存储方案以及反反爬技术,完整实现一个能够稳定获取GitHub Trending数据的爬虫系统。文章包含5000余字详细教程,从环境搭建到代码实现,再到数据处理和存储,最后部署运行,提供全方位指导。GitHub Trending页面展示了GitHub上当前最受欢迎的项目,对于开发者了解技术趋势、发现优秀项目非常有价值。

2201_76125261的博客 736

android开发之android的平台架构及特性

懒惰,只是为了更好的懒惰!

ZaneLove's blog 1441

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

安卓平台架构及特性

1、应用程序层      包含一系列的核心应用程序,包括邮件客户端、日历、地图、浏览器、联系人。通常都是由Java编写的。 2、应用程序框架     应用程序的开发所依赖的框架。开发者开发的程序和系统程序都是平等的,都是通过访问安卓提供的API框架;    大量的API供开发者使用。除了作为应用程序开发的基础,也可以成为软件复用的手段。 3、函数库    系统C库:为嵌入式Linux

tzz828的专栏 465

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

别再乱用信号量了!FreeRTOS互斥量与二值信号量的5个关键区别与选型指南

本文深入解析FreeRTOS中互斥量与二值信号量的关键区别,包括所有权概念、优先级反转处理机制及适用场景。通过实际案例和代码示例,指导开发者在嵌入式系统中正确选择同步机制,避免常见陷阱,提升系统稳定性和性能。

weixin_33681778的博客 635

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android5.0平台架构及特性

Android系统体系结构:         由图可以看出Android系统的底层是建立在Linux系统上的,其平台由操作系统、中间件、用户界面和应用程序软件共4层组成,所采用的是一层一层叠加的结构,被称为软件叠层(SoftWare Stack)的方式,这种叠成结构使得层与层之间的能够相互分离,保证了层与层之间的低耦合行,当某一层发生变化时,并不影响其上层或下层的改变。 接下来对各层进

Sleeping_c的博客 1936

Android的平台架构及特性介绍——初探Android

android系统底层是建立在Linux系统之上的,该平台由操作系统、中间件、用户界面和应用软件这四层组成。它采用一种被称为软件叠层(softwarestack)方式进行构建,使得层与层之间分离,明确各层分工。这保证了层与层之间的低耦合,当下层的层内或层下发生改变时,上层应用程序无需任何改变。 Android系统主要以上6部分组成:系统APP、JavaAPI框架层、原生C/C++库、Android运行时、硬件抽象层(HAL)、Linux内核。 目前,在AndroidStudio中,代码的构建工...

weixin_42370070的博客 566

Android基础知识——Android系统——Android系统特性与平台架构

第一章:Android系统特性与平台架构 Android平台架构: 图1.1 google官方 Android平台架构图 Android系统分为5大层: Linux Kernel(linux内核)——liunx内核层 Hardwar...

u012966182的博客 506

Android的特性及其平台架构介绍

在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如:python、lua、tcl、php等等),还有其他诸如:Qt(qt for android)、Mono(mono for android)等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发

Skyf 1105
上一篇: C++输入流cin方法
下一篇: Java中DecimalFormat类
hellorichen
博客等级 码龄13年 199粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值