揭秘Android App的工作原理-乐居猫学Android开发

Android App的工作原理

Android系统是基于liunx内核的,但是与传统的基于liunx的pc系统不同,用户对Android
app没有绝对的掌控权。pc系统中,在应用程序的系统菜单上选择“退出”或者“关闭”之类的选项会直接杀死进程。在Android系统中不是这样的。而是由系统,当系统需要释放内存来运行新进程或者保证某些后台进程和前端进程顺利执行的时候才会释放相应应用程序的资源,这个释放过程有一个重要性的层次,接下来就听乐居猫做一下说明:

android中进程的层次如下(重要性由高到低):

1、前端进程。顾名思义,前端进程就是目前显示在屏幕上和用户交互的进程,在系统中前端进程数量很少,而这种进程是对用户体验的影响最大,只有系统的内存稀少到不足以维持和用户的基本交互时才会销毁前端进程。因此这种进程重要性是最高的。

2、可见进程。可见进程也拥有一个可视化的界面,只是目前不是最上层界面(最上层界面在前端进程里面),可见进程一般调用了OnPause(),可见进程比前端进程重要性低,但是在交互方面影响还是很大,因为用户可能随时切换过去,所以系统不会轻易销毁它。

3、服务进程。一个服务进程就是一个Service,它调用了startService(),就是UNIX中说的守护进程,对用户不可见,但是保证了一些重要的事件被监听或者维持着某些状态,比如网络数据传输、后台音乐播放,这类进程在内存不足且为了保证前端交互的顺利进行的时候被销毁。

4、后台进程。这里叫后台进程可能会和一般意义上的后台进程混淆,要说明的是,android里的后台进程是调用了OnStop()的,可以理解成用户暂时没有和这个进程交互的愿望,所以这里后台进程有点“待销毁”的意思。

5、空进程。这是一种系统缓存机制,其实就是个进程的外壳,当有新进程创建的时候,这个空进程可以加快进程创建速度,当系统内存不足的时候,首先销毁空进程。

android中进程重要性层次

接下来结合Android Activity的生命周期来说明一下:

一个进程创建时系统会为它创建一个Activity(活动),紧接着调用onCreate(),onCreate()中主要是进行一些初始化,例如读取XML资源文件创建布局,设置主界面各种监听函数等等,每个进程都会调用onCreate()。

接着是onStart(),需要说明的是,在默认 Activity中(就是程序一启动我们看到的那个Activity实体),程序员在写代码的时候并不需要显式去调用onStart(),系统会默默帮你调用;但是,当你需要在这个程序中创建除了默认Activity以外的所有新Activity的时候,你必须显式调用这个onStart(),这个
onStart()有个新名字叫做startActivity(intent),这里的intent表示一个意图,就是我们想创建的新Activity。

然后是onResume(),当我们从主程序界面跳到别的地方再跳回来的时候调用onResume()。然后程序就跑起来了,我们叫他进程 A,如果这个时候其他进程变成了前端进程(进程B),此时进程A就会调用onPause(),这会保存进程的状态做数据持久化。这时候有两种情况,进程A
再次成为前端进程,于是进程A调用onResume()来恢复运行;如果在进程A处于onPause()这段时间内系统内存不足了,进程A就有可能被销毁,来为别的进程腾出内存(为什么是“可能”被销毁?详见上面的android进程重要性层次说明),如果用户再次切换到进程A,这是系统只是重新创建一个进程,它不再是进程A了(因为此时进程A已经被销毁了)。

当onPause()被调用以后用户按了返回键(back),那进程A会调用 onStop(),之前说了用户此时已经没有和进程A交互的愿望了,所以进程A成为了“待销毁”的对象(为什么没有直接销毁呢?答案还是在android
进程重要性层次说明)。那么如果在一个进程A还没有被销毁的时刻用户再次切换到进程A,进程A又成为了前端进程,此时进程A会调用 onRestart(),进而调用onStart()来再次开始进程(此时重新开始的还是进程A本身,没有换成其他的,因为进程A还未被销毁),在这里可以理解成把进程A“唤醒”了。如果很不幸,系统内存又不足了,调用了onStop()后的进程A可能再次被销毁,就像图上画的那样,这里不再赘述。至于 onStop()后面的onDestroy()调用是在系统内存不足的时候由系统调用来销毁进程和释放内存的。

时间: 2024-12-24 08:00:13

揭秘Android App的工作原理-乐居猫学Android开发的相关文章

乐居猫学Andoriod开发之[入门]1 细说JDK、SDK、ADT

学Android开发先搞清楚一些相关的术语,达到了解的水平,为夯实的Android开发技术做好准备.乐居猫在此整理了一些资料,如下: 1.Java JDK Java JDK 简介: JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK). SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE. EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2E

Android系统Recovery工作原理之使用update.zip升级过程分析(一)

通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.我们先从update.zip包的制作开始,然后是Android系统的启动模式分析,Recovery工作原理,如何从我们上层开始选择system update到重启到Recovery服务,以及在Recovery服务中具体怎样处理update.zip包升级的,我们的安装脚本updater-script怎样被解析并执行的等一系列问题.分析过程中所用的Android源码是gin

Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节【转】

本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465439  Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节            Recovery服务毫无疑问是Recovery启动模式中最核心的部分.它完成Recovery模式所有的工作.Recovery程序对应的源码文件位于:/gingerbread0919/bootable/recovery/recovery

Android系统Recovery工作原理之使用update.zip升级过程---updater-script脚本语法简介以及执行流程(转)

目前update-script脚本格式是edify,其与amend有何区别,暂不讨论,我们只分析其中主要的语法,以及脚本的流程控制. 一.update-script脚本语法简介: 我们顺着所生成的脚本来看其中主要涉及的语法. 1.assert(condition):如果condition参数的计算结果为False,则停止脚本执行,否则继续执行脚本. 2.show_progress(frac,sec):frac表示进度完成的数值,sec表示整个过程的总秒数.主要用与显示UI上的进度条. 3.for

android app性能优化大汇总(google官方Android性能优化典范 - 第1季)

大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能.从设计师的角度,他们希望App能够有更多的动画,图片等时尚元素来实现流畅的用户体验.但是Android系统很有可能无法及时完成那些复杂的界面渲染操作.Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成. 如果你的某个操作花费时间是24ms,系统在得到VSYNC信号的时候就无法进行正常

android app 的插件化、组件化、模块化开发-2

Android 插件化 ——指将一个程序划分为不同的部分,比如一般 App的皮肤样式就可以看成一个插件 Android 组件化 ——这个概念实际跟上面相差不那么明显,组件和插件较大的区别就是:组件是指通用及复用性较高的构件,比如图片缓存就可以看成一个组件被多个 App共用 插件的方式只有三种:1,apk安装,2,apk不安装,3,dex包 滴滴插件化项目VirtualAPK开源!https://mp.weixin.qq.com/s?__biz=MzUxMzcxMzE5Ng==&mid=22474

开发一个新的android界面、界面跳转 看图学Android---Android 开发实例教程三、四

Android实例图解教程目录 http://blog.csdn.net/wyx100/article/details/45061407 一.课程功能 本课程讲述建立一个新界面和界面切换(从界面一切换到界面二). 二.课程界面 界面一(启动界面) 界面二(主界面) 三.工作流程 完成页面切换需要2个过程: 1.建立一个工程,见第二节. http://blog.csdn.net/wyx100/article/details/45248209 可以在该项目基础继续开发. 2.建立开机界面 先引入资源

android app性能优化大汇总(google官方Android性能优化典范 - 第2季)

Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的缩放,缓存,重用,PNG压缩,自定义View的性能,提升设置alpha之后View的渲染性能,以及Lint,StictMode等等工具的使用技巧. (1)Battery Drain and Networking 对于手机程序,网络操作相对来说是比较耗电的行为.优化网络操作能够显著节约电量的消耗.在性

Android APP如何防止二次打包揭秘。

Android系统的开放性和免费性等特征让开发者和用户趋之若鹜,用户也渐渐习惯了Android应用的这种免费午餐,但在免费的背后却有着巨大的安全阴影.我们可以通过APP检测工具对APP进行检测. "Android APP二次打包"则是盗版正规Android APP,破解后植入恶意代码重新打包.不管从性能.用户体验.外观它都跟正规APP一模一样但是背后它确悄悄运行着可怕的程序,它会在不知不觉中浪费手机电量.流量,恶意扣费.偷窥隐私等等行为. 面对二次打包不少公司都有自己的防范措施,知名公