一、什么是Application?

Android系统会为每个程序运行时创建一个Application类的对象且仅创建一个

(例如:打开微信安卓系统会为微信创建一个Application对象,再打开微博安卓系统又会为微博创建一个Application对象),所以Application可以说是单例 (singleton)模式的一个类。

Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例 的,所以在不同的Activity,Service中获得的Application对象都是同一个对象。所以可以通过Application来进行一些,数据传递,数据共享,数据缓存等操作。

二、Application的生命周期

1、onCreate() 程序创建的时候执行

2、onTerminate() 程序终止的时候执行

在模拟环境下执行。当终止应用程序对象时调用,不保证一定被调用,当程序是被内核终止以便为其他应用程序释放资源,那么将不会提醒,并且不调用应用程序Application对象的onTerminate方法而直接终止进程。

3、onLowMemory() 低内存的时候执行

好的应用程序一般会在这个方法里面释放一些不必要的资源,来应付当后台程序已经终止,

前台应用程序内存还不够时的情况。

4、onConfigurationChanged(Configuration newConfig) 配置改变时触发这个方法。

5、onTrimMemory(int level)程序在进行内存清理时执行

三、application 被杀死的情况分析

Android会根据运行在这些进程内的组件及他们的状态把进程划分成一个”重要程度层次”,进而决定在内存较低的时候杀掉哪个进程。其重要的程度按以下规则排序:

  1. 前端进程:

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

可视进程:

可视进程是一个被用户可见, 但没有显示在最前端 (onPause方法被调用时) 的Activity的进程。比如在微信聊天时候,输入文字是的搜狗输入法。这种进程被系统认为是极其重要的, 并且通常不会被杀掉, 除非为了保持所有前端进程正常运行不得不杀掉这些可见进程。

服务进程:

这是一个包含Service的进程, 该Service是由startService()方法启动的, 尽管这些进程用户不能直接看到,比如在后台播放mp3或是在后台下载上传文件。因此系统保持它们运行,除非没有足够内存来保证所有的前台进程和可视进程。

后台进程:

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

空进程:

是没有持有任何活动应用组件的进程,保留这种进程的唯一理由是为了提供一种缓存机制,缩短他的应用下次运行时的启动时间。系统杀掉这些进程,是为了在这些空进程和底层的核心缓存之间平衡整个系统的资源。

学习参考:

https://blog.csdn.net/maican666/article/details/77257878

【详细】Application生命周期简介相关推荐

  1. 服务器控件生命周期简介

    服务器控件生命周期简介 服务器控件的生命周期是创建服务器控件最重要的概念.作为开发人员,必须对服务器控件生命周期深刻理解.当然,这不是一朝一夕就可以做到的.对于学习控件开发技术的初学者,可以不必掌握得 ...

  2. 安卓application生命周期的onCreate、onLowMemory、onTrimMemory、onConfigurationChanged

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓测试Application生命周期: application类为应用程序的创建和终止.低可用内存和配置改变提供了事件处理程序(如前面部分所述). ...

  3. 软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型

    文章目录 软件危机 软件的定义 软件危机典型表现 产生软件危机的原因 消除软件危机的方法 软件工程 什么是软件工程 软件工程的本质特征 软件工程的基本原理 软件工程方法学 传统方法学 面向对象方法学 ...

  4. Application生命周期

    一.Application的用途 1.Application是什么? Application和Activity,Service一样,是Android框架的一个系统组件,当Android程序启动时系统会 ...

  5. Android Activity 以及 Application 生命周期

    在日常开发中(对又是日常开发).你会发现很多逻辑如果只有onCreate和onDestory完全不够用.所以稍微系统的了解一下Activity生命周期的相关知识,也很有必要. 本篇简单学习Androi ...

  6. 超详细vue生命周期解析(详解)

    vue是每一个前端开发人员都绕不过的一个技术,在国内的市场占有量也是非常的大,我们大部分人用着vue, 却不知道他内部其实经历了一些什么.每个生命周期又是什么时候开始执行的.我们今天来详细的看一看 首 ...

  7. JSF 2.0/2.1 生命周期简介

    2019独角兽企业重金招聘Python工程师标准>>> 标准的生命周期划分为六个阶段:恢复视图.应用请求值.验证.更新模型值.调用应用程序.渲染响应,每一个阶段都可以直接跳转到最后一 ...

  8. React 生命周期简介

    React 中组件的生命周期会经历如下三个过程:装载过程.更新过程.卸载过程. 装载过程:组件实例被创建和插入 DOM 树的过程: 更新过程:组件被重新渲染的过程: 卸载过程:组件从 DOM 树中删除 ...

  9. Maven系列之Maven生命周期简介

    Maven的生命周期其实是指它对所有的构建过程进行了反复的推敲.反思,之后总结了一套高度抽象过程.基本上包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署..站点生成等步骤 Maven有 ...

最新文章

  1. python计算时间差
  2. JavaScriptjQuery.stopPropogation()
  3. 使用 Tye 辅助开发 k8s 应用竟如此简单(五)
  4. 在 Docker Machine 中使用 Mirror 服务
  5. SAP License:雾里看花系列——SAP应用应该更关注业务过程
  6. 电源管理与驱动设计笔记
  7. 初识Git 如何使用Git将本地项目上传到Github
  8. linux PMBus总线及设备驱动分析
  9. 白细胞直方图C语言,白细胞三分群及其直方图
  10. 关于sockaddr_in 、WSAData 、sockaddr等未定义的问题
  11. usertoken_华为手机usertoken已过期
  12. 【随手写】JS过滤所有script正则
  13. win10 1607 密匙
  14. poj 2536 Gopher II
  15. matlab函数:residue和residuez的用法
  16. Bit.ly取代TinyURL成为Twitter默认网址缩写服务
  17. 我的2007-written in BIT
  18. 怎么彻底卸载matlab_电脑360怎么卸载
  19. 搜索引擎定向广告策略--以百度为例
  20. DIY操作系统(6):特权级CPL、DPL与RPL

热门文章

  1. 腾讯云轻量服务器上CentOS 7.6使用C语言连接MySQL和查询MySQL
  2. STM32F103跳过停止模式,不能进入停止模式
  3. 四款常见数据库比较同步软件汇总
  4. React+ Dva + Atd入门知识(必读)——框架详解
  5. 第20期《进制转换》
  6. java基础回顾——进制转换
  7. 一文了解区块链开发最全技术资料!
  8. Java类的加载过程
  9. python安装prosail库及Fortran编译器下载与配置
  10. ArcMap从中国行政区划中提取区县边界shape文件