`

Android系统的一些机制说明

 
阅读更多

其实从很多方面,Android系统的机制都和其他系统也很大不同,更多的时候,用户是把使用其他系统的经验带到了Android手机上,例如很多人买到Android手机的第一件事就是安装“高级任务管理器”或者“Auto task killer”等杀进程软件。那么久从最浅显易懂的方式分享下Android的某些与众不同的机制。

  后台
  
使用过Symbian或Windows Mobile系统的用户普遍都会有一个习惯——频繁关注剩余RAM的多少,恨不得把一份RAM掰成两瓣儿使,且生怕后台有什么应用程序开着耗光手机电量,但Android采用的是不同的内存管理机制:当用户从程序切回主界面时,该程序会被暂停,系统此时不会给它分配CPU资源,这样做一来可以增加下次进入该程序的速度,二来不会在多任务的时候耗电过于严重,三来更不会拖慢系统速度,正所谓一石三鸟。经常使用Android程序的用户可能就有这样的体验,Home键切回主界面再回来的时候,程序还要从主界面再次Loading,这就是该机制所致。
  实际上,Android程序对于RAM的消耗很厉害,这是因为Android实际上是基于Java的,每个打开的应用程序都带有一个Java虚拟机,因此相比其他系统会消耗更多的RAM,但这样做有很大好处——单一的程序崩溃并不会影响到系统的稳定性,算是一个有益的Android特性。
  我们可以看到,Android平台在保证多任务的同时兼具了兼顾了稳定性和速度,但正是由于其他平台给用户带来的思维定势,让很多Android用户认为后台只要开多了自然会变慢,自然会缩短续航时间,但其实用户大可不必在这方面费脑筋。

  回收机制
  细心的朋友可能会问,RAM是有限的,如果被程序占满了怎么办?Android系统在这方面的处理同样是自动化的——内存回收机制,这个机制是由Linux内核中的LowMemory Killer完成的。
  具体来讲就是,Android系统有一个按重要性从高到低排列的表格,所有应用程序按照重要度高低对号入座(分为FOREGROUD_APP,VISIBLE_APP,SECONDARY_SERVER,HOME_APPHIDDEN_APP,CONTENT_PROVIDER,EMPTY_APP等),位于这个排行榜末尾的程序自然就是Android下手的主要对象。例如六个程序分别属于这六个类型,从高到底排为1,2,3,4,5,6,对应的内存阀值分别为8MB,12MB,20MB,32MB,48MB,60MB(假设),当空闲RAM小于48MB的时候,系统会杀掉5和6;当空闲RAM小于20MB的时候,系统会杀掉3到6的程序,此处笔者简化了此机制,实际上是所有程序类型和内存阀值一一对应,严密执行的。因此,用户在使用一般应用程序或待机的时候(例如UC浏览器),完全可以把内存管理的工作交由Android系统来完成。当然,在需要开启大型游戏的时候,杀进程还是有用的,更多空余的RAM能够提高游戏启动速度。

  Flash和跑分
  Android2.2并不是支持Flash的充要条件——除了Android2.2,一个支持Armv7指令集的CPU是必须的,这也是很多Android2.2机型不支持Flash的原因,所以,不要被某些参数给忽悠了。
  Quadrant Advanced这个软件相信Android用户都已经非常熟悉,它能够针对一款Android的硬件从I/O,CPU,3D,2D等方面做出测试,并生成与其他机型和横向柱状图,一时成为很多Android玩家比拼硬件水准的一个标尺。然而笔者在测试过程中发现,类似的软件实际上并不够客观,优化的好坏、固件的版本等因素会很大程度左右测试结果,经过优化的Nexus S甚至能够跑到10000+(双核旗舰一般也在3000左右徘徊),该软件对于双核手机的实际性能也有些无能为力,因此建议大家客观看待这些跑分结果。

  耗电和自启动
  像前文笔者提到的那样,后台进程,例如微信(需要推送)或者音乐播放(需要后台运行)等应用,这些应用再被切换到后台时会自动开启一个Service服务,这些附带Service服务的应用才会消耗CPU资源以及电力。没有Service的一般应用基本是不消耗CPU资源和电力的。
  很多人觉得双核CPU会更耗电,其实使用过摩托罗拉Atrix 4G的用户应该最有发言权,使用双核的Atrix 4G由于核心协同工作提高了工作效率,反而更省电,Android手机最费电还是屏幕,尽可能减少屏幕开启时间和调低屏幕亮度,是延长待机时间最有效直接的方式。
  关于应用程序自启动,相信很多人都有这个疑问,“我明明关了程序,为什么过一会儿它又自动运行了?”笔者查阅了很多资料,相关资料非常少,但笔者可以确定的是,这些自动启动的服务都是插件必须、同步需要,或后台正在运行的Service对应的应用程序,有些时候后台程序并不是真的启动,而是保持了暂停状态,以便用户最快速进入,这是上面提到的Android系统的一个优点,只要启动的程序没有Service项,它们实际上都只是出于暂停状态,并不会消耗CPU资源或者电力,和这些程序较劲其实是没有任何意义的。
  当然,如果真想杜绝它们自启动的话,方法还是有的,第一种是在手机待机的时候关闭网络,这样绝大部分应用程序都不会再自行启动;第二是Root后删除对应的自启动应用程序,从源头上灭掉这些程序,不过这两种方法在笔者看来绝对是弊大于利的。

  App2SD和程序卸载
  关于App2SD,使用PC的经验告诉用户,C盘空间越小PC速度会越慢,因此很多人开始尝试开启App2SD,甚至对存储卡分区,希望将程序转移到SD卡上面,为Android手机省出一定的空间,希望提高手机运行的速度,但这样做也有很大的弊端,第一是会导致耗电的增加,第二是部分插件失效,第三是程序运行效率下降,此外对SD卡也提出了较高的要求。
  关于程序卸载,很多人买到Android手机后,会发现自己无法卸载手机中的一些程序,其实这是和固件有关系的,有些厂商或运营商会将修改版的固件刷入手机,固件中的程序已经属于系统级,自然很难删除,用户只有将自己的手机Root,然后才能进行系统级别的修改。稍不注意这点用户便会被扣费,这也是很多人购买手机时容易忽略的一个方面。

分享到:
评论

相关推荐

    Android IPC机制详解

    关于android系统的进程间通信,详细说明了android是如何管理消息机制,如果进行进程间的通信。

    Android的IPC机制——Binder

    android技术内幕--系统卷,第三章Android的IPC机制,关于Binder通信机制,详细讲解,并附有framework层代码说明,

    Android系统序安装指南

    关于Android系统版本,从Android/安卓手机软件下载的软件大多会有系统平台的说明,我们只需确定自己的手机的系统版本,就可以知道这个APK到底能不能安装到你的手机上。在手机主屏幕上按MENU键->设置->关于手机,在...

    论文研究-Android权限机制安全研究综述.pdf

    总结了目前针对Android权限机制相关的研究工作,说明了Android权限机制的实现原理,并从Android权限机制有效性分析、Android权限机制改进方案,以及利用权限这个重要的安全要素进行应用程序安全性分析三个方面,对已...

    基于Android的手机导航系统设计与实现(论文+源码)-kaic.docx

    ⑴ 对导航应用、智能手机操作系统和 GPS 技术作了介绍,研究分析了Android 系统的 系统特征和体系结构,对高德地图 API 和其他开发工具进行了说明,并介绍了开发环境的 具体构建过程。 ⑵ 介绍了 Socket 套接字的...

    Android API中文文档 v2017.zip

    API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节. ...

    安卓Android图书馆座位占座app+源代码+文档说明+数据库.zip

    安卓Android图书馆座位占座app设计可导入Studio毕业源码案例设计 开发环境: Myclipse/Eclipse/Idea都可以(服务器端) + Eclipse/AndroidStudio都可以(手机客户端) + mysql数据库 系统客户端和服务器端架构技术: 界面...

    Android深入浅出之Binder机制

     Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交互的。所以搞明白Binder的话,在很大程度上就能理解程序运行的流程。 我们这里将以MediaService的...

    Invetter__Locating_Insecure_Input_Validations_in_Android_Services.pdf

    为了防止恶意软件利用这些系统服务非法获取敏感的系统资源,Android系统实现了一套基于访问控制的机制去保护这些服务。虽然,已经有很多工作研究了这些访问控制中的漏洞问题,但是,他们都集中于研究那些基于权限...

    Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析

    在上一篇文章中,我们分析了Android系统进程间通信机制Binder中的Server在启动过程使用Service Manager的addService接口把自己添加到Service Manager守护过程中接受管理。在这一篇文章中,我们将深入到Binder驱动...

    深入理解Android:卷I--详细书签版

     结合实际应用开发需求,以情景分析的方式有针对性地对Android的源代码进行了十分详尽的剖析,深刻揭示Android系统的工作原理  机锋网、51CTO、开源中国社区等专业技术网站一致鼎力推荐 内容简介  《深入理解...

    Android高级编程--源代码

     由于Android 1.0是一个正在兴起的全新手机操作系统,所以当前支持它的手机还不多。和任何其他产品早期的发行版一样,Android的软件和开发库还会经历很多正常的改进和完善。本书的内容和示例提供了如何使用当前SDK...

    新版Android开发教程.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...

    疯狂Android讲义源码

     第1章 Android应用与开发环境 1  1.1 Android的发展和历史 2  1.1.1 Android的发展和简介 2  1.1.2 Android平台架构及特性 3  1.2 搭建Android开发环境 5  1.2.1 下载和安装Android SDK 5  1.2.2 安装...

    java/android 开发面试题

    1. 请描述下Activity的生命周期。 2. 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态? 3. 如何将一个Activity设置成窗口的样式。... 你如何评价Android系统?优缺点。

    Android项目开发报告.docx

    Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。一般情况下如果要将Android移植到其他硬件去运行,只需要实现这部分代码即可。Android也包括了一个核心库,该核心库提供了Java编程语言核心库的...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    然而,由于HTML5的W3C标准规范还未制定,安卓系统中类浏览器Webview自身存在一些局限性,因此仍存在着诸多问题亟需解决,包括:(1)多窗口类浏览器模式问题。安卓上用于加载的Webview视图窗口只是作为类浏览器而...

    Android项目开发报告.doc

    Android包含一些C/C++库,这些库能被Android系统中不同的组件使用 。一般情况下如果要将Android移植到其他硬件去运行,只需要实现这局部代码即可。A ndroid也包括了一个核心库,该核心库提供了Java编程语言核心库的...

    Android自主学习项目报告(一).doc

    自主学习项目报告(一) 1. 自主学习项目要求 1....显式Intent(指定启动名称): 明确指出目标组件名称的Intent 告诉Android系统,我要"找谁",Android平台将目标组件启动起来 常用于APP内部组件间启动 隐式Inten

Global site tag (gtag.js) - Google Analytics