Android生命周期

Android安卓进程保活(二)设置前台Service 总而言之,成功是留给准备好的人的。无论是参加什么面试,都要做好充足的准备,注意好面试的礼仪和穿着,向面试官表现出自己的热忱与真诚就好。即使最后没有过关,也要做好经验的总结,为下一次面试做好充足准备。这里我为大家准备了一些我在面试后整理的面试专题资料,除了面试题,还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家,希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。 阅读详情

在 Android 中,多数情况下每个程序都是在各自独立的 Linux 进程中运行的。当一个程序或其某些部分被请求时,它的进程就“出生”了;当这个程序没有必要再运行下去且系统需要回收这个进程的内存用于其他程序时,这个 进程就“死亡”了。可以看出,Android 程序的生命周期是由系统控制而非程序自身直接控制。这和我们编写桌面应用程序时的思维有一些不同,一个桌面应用程序的进程也是在其他进程或用户请求时被创 建,但是往往是在程序自身收到关闭请求后执行一个特定的动作(比如从 main 函数中 return)而导致进程结束的。要想做好某种类型的程序或者某种平台下的程序的开发,最关键的就是要弄清楚这种类型的程序或整个平台下的程序的一般工作 模式并熟记在心。在 Android 中,程序的生命周期控制就是属于这个范畴——我的个人理解:)

在 Android 系统中,当某个 activity调用 startActivity(myIntent) 时,系统会在所有已经安装的程序中寻找其 intent filter 和 myIntent 最匹配的一个 activity,启动这个进程,并把这个 intent 通知给这个 activity。这就是一个程序的“生”。比如我们在 Home application 中选择 “Web browser”,系统会根据这个 intent 找到并启动 Web browser 程序,显示 Web browser 的一个 activity 供我们浏览网页(这个启动过程有点类似我们在在个人电脑上双击桌面上的一个图标,启动某个应用程序)。在 Android 中,所有的应用程序“生来就是平等的”,所以不光 Android 的核心程序甚至第三方程序也可以发出一个 intent 来启动另外一个程序中的一个 activity。Android 的这种设计非常有利于“程序部件”的重用。

  一个 Android 程序的进程是何时被系统结束的呢?通俗地说,一个即将被系统关闭的程序是系统在内存不足(low memory)时,根据“重要性层次”选出来的“牺牲品”。一个进程的重要性是根据其中运行的部件和部件的状态决定的。各种进程按照重要性从高到低排列如 下:
  1. 前台进程。这样的进程拥有一个在屏幕上显示并和用户交互的 activity 或者它的一个IntentReciver 正在运行。这样的程序重要性最高,只有在系统内存非常低,万不得已时才会被结束。
  2. 可见进程。在屏幕上显示,但是不在前台的程序。比如一个前台进程以对话框的形式显示在该进程前面。这样的进程也很重要,它们只有在系统没有足够内存运行所有前台进程时,才会被结束。
  3. 服务进程。这样的进程在后台持续运行,比如后台音乐播放、后台数据上传下载等。这样的进程对用户来说一般很有用,所以只有当系统没有足够内存来维持所有的前台和可见进程时,才会被结束。
  4. 后台进程。这样的程序拥有一个用户不可见的 activity。这样的程序在系统内存不足时,按照 LRU 的顺序被结束。
  5. 空进程。这样的进程不包含任何活动的程序部件。系统可能随时关闭这类进程。
 

从某种意义上讲,垃圾收集机制把程序员从“内存管理噩梦”中解放出来,而 Android 的进程生命周期管理机制把用户从“任务管理噩梦”中解放出来。我见过一些 Nokia S60 用户和 Windows Mobile 用户要么因为长期不关闭多余的应用程序而导致系统变慢,要么因为不时查看应用程序列表而影响使用体验。Android 使用 Java 作为应用程序 API,并且结合其独特的生命周期管理机制同时为开发者和使用者提供最大程度的便利。

Activity lifecycle

Activity有三种基本状态:

  1. Active:处于屏幕前景(当前task的栈顶Activity处于Active状态),同一时刻只能有一个Activity处于Active状态;
  2. Paused状态:处于背景画面画面状态,失去了焦点,但依然是活动状态;
  3. stopped:不可见,但依然保持所有的状态和内存信息。

可以调用finish()结束处理Paused或者stopped状态的Activity。

各种状态之间通过下列的函数调用转换:

void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()

Activity的生命周期可以分为三组:

  • The entire lifetime of an activity happens between the first call toonCreate() through to a single final call to onDestroy().
  • The visible lifetime of an activity happens between a call toonStart() until a corresponding call to onStop().

  • The foreground lifetime of an activity happens between a call to onResume() until a corresponding call toonPause().

activity_lifecycle

 

保存Activity状态

To capture that state before the activity is killed, you can implement an onSaveInstanceState() method for the activity. Android calls this method before making the activity vulnerable to being destroyed — that is, before onPause() is called. It passes the method a Bundle object where you can record the dynamic state of the activity as name-value pairs. When the activity is again started, the Bundle is passed both to onCreate() and to a method that's called after onStart(),onRestoreInstanceState(), so that either or both of them can recreate the captured state.

Unlike onPause() and the other methods discussed earlier, onSaveInstanceState() and onRestoreInstanceState()are not lifecycle methods. They are not always called. Because onSaveInstanceState() is not always called, you should use it only to record the transient state of the activity, not to store persistent data. Use onPause() for that purpose instead.

启动另一个Activity的过程

  • The current activity's onPause() method is called.
  • Next, the starting activity's onCreate(), onStart(), and onResume() methods are called in sequence.
  • Then, if the starting activity is no longer visible on screen, its onStop() method is called.

    service生命周期

    A service can be used in two ways:

    • It can be started and allowed to run until someone stops it or it stops itself. In this mode, it's started by callingContext.startService() and stopped by calling Context.stopService(). It can stop itself by callingService.stopSelf() or Service.stopSelfResult(). Only one stopService() call is needed to stop the service, no matter how many times startService() was called.
    • It can be operated programmatically using an interface that it defines and exports. Clients establish a connection to the Service object and use that connection to call into the service. The connection is established by callingContext.bindService(), and is closed by callingContext.unbindService(). Multiple clients can bind to the same service. If the service has not already been launched, bindService() can optionally launch it.

    相关的方法:

    void onCreate()
    void onStart(Intent intent)
    void onDestroy()

    The onCreate() and onDestroy() methods are called for all services, whether they're started byContext.startService() or Context.bindService(). However,onStart() is called only for services started bystartService().

    If a service permits others to bind to it, there are additional callback methods for it to implement:

    IBinder onBind(Intent intent)
    boolean onUnbind(Intent intent)
    void onRebind(Intent intent)

    service_lifecycle

     

    Broadcast receiver lifecycle

    只有一个方法:void onReceive(Context curContext, Intent broadcastMsg)

    A process with an active broadcast receiver is protected from being killed. But a process with only inactive components can be killed by the system at any time, when the memory it consumes is needed by other processes.

    This presents a problem when the response to a broadcast message is time consuming and, therefore, something that should be done in a separate thread, away from the main thread where other components of the user interface run. IfonReceive() spawns the thread and then returns, the entire process, including the new thread, is judged to be inactive (unless other application components are active in the process), putting it in jeopardy of being killed. The solution to this problem is for onReceive() to start a service and let the service do the job, so the system knows that there is still active work being done in the process.

    进程的生命周期

    Android根据其重要性在内存不足的时候移去重要性最低的进程。重要性由高到低为:

    1. 前台进程
    2. 可见进程
    3. 服务进程
    4. 后台进程
    5. 空进程

    注意:Because a process running a service is ranked higher than one with background activities, an activity that initiates a long-running operation might do well to start a service for that operation, rather than simply spawn a thread — particularly if the operation will likely outlast the activity. 比如播放MP3的时候就要启动一个service。

Android - JobService常用场景分析 概览 JobScheduler是android系统提供的一个任务执行框架,通过JobScheduler我们可以根据不同的策略调度任务的执行。 例如: 指定任务可以在指定的网络下执行 指定任务只在充电的状态下进行 设置任务的截止时间 指定延迟一段时间后执行任务 指定任务在手机空闲的情况下执行 如果app被杀死则无法最终执行任务,如果有重启后需要继续执行这种需要建议使用WorkManager 使用 基本使用 创建自定义JobService并在manifest中配置 class ExeTaskAfter2Se 阅读详情

相关推荐

ANSYS Twin Builder实战:5步搞定数字孪生模型部署(附ROM配置技巧)

本文详细解析了ANSYS Twin Builder在数字孪生模型部署中的实战应用,重点介绍了ROM(降阶模型)配置技巧。通过5个关键步骤,从环境搭建到工业部署,帮助工程师高效实现高精度三维仿真到轻量化数字孪生的转化,提升预测性维护和系统仿真效率。

weixin_27330481的博客 659

android生命周期(详细总结)

1、android生命周期图   2、activity三种状态 (1)active:当Activity运行在屏幕前台(处于当前任务活动栈的最上面),此时它获取了焦点能响应用户的操作,属于活动状态,同一个时刻只会有一个Activity 处于活动(Active)。 (2)paused:当Activity失去焦点但仍对用户可见(如在它之上有另一个透明的Activity或Toast、AlertD

now_android 3万+

手把手教你用Python+GDAL处理0.5米吉林一号卫星影像(附代码)

本文详细介绍了如何使用Python和GDAL处理吉林一号0.5米高分辨率卫星影像,包括环境配置、数据预处理、分辨率融合、植被指数计算及地物分类等关键步骤。通过实战代码示例,帮助开发者高效处理大尺寸遥感数据,解决资源崩溃和算法选择问题,提升遥感影像分析能力。

weixin_30892037的博客 126

Android生命周期详解

最近在看任玉刚老师的开发艺术探索,记录一下。 Android生命周期分为两部分: 一、典型情况下的生命周期。 二、异常情况下的生命周期。 一、典型情况下的生命周期 典型情况下的生命周期指在有用户参与的情况下,Activity所经过的生命周期的改变,正常情况下,Activity的常用生命周期就只有下面七个。 /*1.onCreate: 每个Activity在写代码的过程中都会看见这个函数, 是声明周期的第一个方法。 一般做一些资源和数据初始化的工作, 比如绑定相对应的资源布局s

梦芯洛尘 1万+

解码运动想象:BCI Competition IV 2a数据集实战指南

本文提供了BCI Competition IV 2a数据集的实战指南,详细解析了该经典运动想象脑电数据集的结构、文件格式与实验范式。通过MNE-Python等工具,逐步演示了从原始信号读取、预处理(通道选择、滤波、分段)到特征提取(CSP、频带功率)和模型训练(LDA、SVM)的完整流程,并强调了受试者独立评估的重要性,为BCI研究者提供了可复现的入门与进阶路径。

weixin_29304985的博客 362

MT4量化交易入门:手把手教你用MQL4编写第一个外汇EA(含完整代码)

本文详细介绍了如何使用MQL4在MT4平台上编写第一个外汇EA,涵盖从开发环境配置到均线交叉策略实现的完整流程。通过手把手教学和完整代码示例,帮助量化交易新手快速掌握外汇自动化交易的核心技术,实现高效的MT4量化交易系统。

mmm90的博客 527

Android之Service设置android:process作用

在AndroidManifest.xml中定义service时会看到这样的代码android:process=”:remote”,例如: <service android:name="com.test.hello.DaemonService" android:enabled="true" android:exported="false" android:p...

LVXIANGAN的专栏 2万+

基于 YOLOv26 的 PCB 板缺陷检测:工业级视觉实战

本文提出了一种基于YOLOv26的PCB板缺陷检测系统,通过深度学习技术实现对PCB板缺陷的自动化检测。系统能够识别短路、开路、焊点不良等8种常见缺陷,具有高精度、多类别分类和实时推理等优势。文章详细介绍了系统架构,包括数据采集、预处理、YOLOv26模型检测和后处理模块。在代码实现部分,给出了环境配置、数据预处理与增强的具体方法,使用Albumentations库进行图像增强处理。该系统为电子制造业提供了高效、准确的PCB质量检测解决方案,显著提升了检测效率和准确性。

一键难忘的博客 337

Android安卓——Android程序生命周期

多处的开发者都给使用者了一个方便,给一些东西设置了一个生命周期的东西。本次学习主要对安卓中程序的生命周期进行讲解。 充分了解安卓生命周期,记住生命周期的优先级,为后续的开发打基础。 Android程序生命周期1、程序的生命周期 程序的生命周期是在Android系统中进程从启动到终止的所有阶段,也就是Android程序启动到停止的全过程 程序的生命周期由Android系统进行调度和控制的 2、A

Deniece_X的博客 1055

Linux故障排查和性能优化面试题及参考答案

在 Linux 系统中,负载(Load Average)是衡量系统繁忙程度的一个重要指标,它表示系统在特定时间间隔内运行队列中的平均进程数。负载值反映了系统当前的工作压力,主要包括 CPU 等待运行的进程数量和处于不可中断睡眠状态(通常是等待 I/O 操作完成)的进程数量。负载平均值通常有三个数值,分别代表过去 1 分钟、5 分钟和 15 分钟内的系统平均负载。例如,在使用uptime命令或查看文件时,会看到类似这样的输出,这三个数值依次表示过去 1 分钟、5 分钟和 15 分钟的负载平均值。

大模型大数据攻城狮的专栏 1081

[网络安全提高篇] 一一九.恶意软件动态分析经典沙箱Cape的安装和基础用法详解

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文详细介绍恶意代码静态分析经典工具Capa的基础用法,以及批量提取静态特征和ATT&CK技战术,主要是从提取的静态特征Json文件中提取关键特征。这篇文章将详细讲解动态分析沙箱Cape,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。本文先介绍Cape沙箱的安装和基础用法,后续随着深入再分享。基础性文章,希望对您有帮助!

杨秀璋的专栏 1万+

Android安卓中Activity活动生命周期

文章目录前言活动的状态常规情况下的生命周期典型情况下的生命周期一些例外情况的生命周期异常情况下的生命周期总结 前言 Activity作为安卓四大组件之一,平常我们接触得最多得也是activity,所以很有必要详细了解一下他的详细生命周期。这篇文章定位是有一点安卓基础的,所以还完全不了解的可以先去学习一下activity。这篇文章主要是讲活动的生命周期。 活动的生命周期,人有胎儿期,青春期,老年期一...

一只修仙的猿 668

IMSL CNL 7.0.0 (x86-64)Crack

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

【小王的安卓之路】Android安卓入门之Activity(活动)及其生命周期

- 1.Activity是什么? - 2.Activity的七大生命周期 - 3.Activity的生老病死 - 4.多个Activity交互时生命周期的变化 - 5.Activity的主要作用

小王的学习blog 4万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Android之路】安卓APP的生命周期与设计方法

Android应用生命周期与分层设计摘要: Android应用生命周期由四大组件(Activity、Service、BroadcastReceiver、ContentProvider)各自的生命周期构成。Activity负责UI交互,Service处理后台任务,BroadcastReceiver响应广播事件,ContentProvider管理数据共享。开发者需根据组件特性管理资源,如在Activity中保存临时状态,避免Service耗时操作阻塞主线程等。 在应用架构设计上,推荐采用分层设计提升可维护性。多

m0_61319200的博客 1142

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android开发-安卓生命周期

5.1、回调函数 Activity定义了7个回调函数来对应生命周期的不同状态的改变 onCreate():在活动创建时调用stop onStart():在活动为用户可见时调用 onResume():在应用程序与用户开始交互时被调用 onPause():活动暂停无法与用户交互时调用 onStop():活动不可见时调用 onDestory():活动被系统销毁之前调用 onRestart():当活动在destory前stop后重新打开时调用 public class ...

xmosang的博客 1423

android横竖屏切换 生命周期,安卓横竖屏切换时的生命周期

横屏切换竖屏Activity的生命周期。现在给大家分析一下他切换时具体的生命周期是怎么样的。1、新建一个Activity,并把各个生命周期打印出来2、运行Activity,得到如下信息onCreate–>onStart–>onResume–>3、按crtl+f12切换成横屏时onSaveInstanceState–>onPause–>onStop–>onDest...

weixin_39613951的博客 1769

Android App ActivityLifeCycle(安卓活动生命周期)

Android App ActivityLifeCycle(安卓活动生命周期) 关于 返回栈 活动的4个运行状态 (运行-暂停-停止-销毁) 活动的7个回调方法(onCreate-onStart-onResume-onPause-onStop-onDestory-onRestart) 3种生存期(完整生存期-可见生存期-前台生存期) 这些内容都可以在本站中其他博主的博客里找到,本博客不再赘述。 ...

qq_36002022的博客 1383

安卓 Android Activity 生命周期

本文提供一个测试类通过打印的方式展示在多个Activity之间互相跳转的时候,各个Activity的。下图出自 郭霖 《第一行代码(第二版)》上面的图,其实不太好记。

wuyujin1997的博客 1000

安卓(android)生命周期的系统性总结以及实例演示

Activity是安卓中最最重要的一个基础组件,下面就对它的一些系统性的总结分享给各位开发人员,帮助大家更好的理解和使用。 1、Activity显示和销毁原则: Activity的顺序是按照栈的先进后出原则进行的。当启动其他Activity时当前的这个Acitivity就会被停止,新的Activity将会压入栈中,同时获取用户焦点;当用户按返回键时,当前的这个Activity将会被销毁,前一个

luoshiwutai的博客 891

安卓的学习之路【一】Android 生命周期

自己哆哆嗦嗦参与安卓已经半年多了,现在才开始有了写博客的意识。从现在开始顺便总结过去,顺便写点博客纪念下。 每次面试都回碰到的问题:Android的生命周期,今天就来总结一下: 首先是官方文档给出的生命周期图: 一个最简单的完整的Activity生命周期会按照如下顺序回调:onCreate -> onStart -> onResume -> onPause -> onStop -> on

qq_31660173的博客 605

Android—— Activity生命周期,高级安卓面试题

学习。

m0_61549674的博客 993

Android(安卓)活动的生命周期

(即存储活动的栈)Android是使用任务(Task)来管理活动的,任务可以理解为一个存放着许多活动的栈。栈是一种后进先出的数据结构,当我们启动一个新活动的时候活动入栈,并且显然这个新启动的活动会处于栈顶,系统也总显示栈顶的活动给用户,当我们调用finish()方法或者Back(按返回键)去销毁当前活动时,即会在栈顶移除该活动,然后就会显示上次在栈顶的活动。

weixin_57244464的博客 286

安卓活动的生命周期

掌握活动的生命周期对任何Android开发者来说都非常重要,当你深入理解活动的生命周期之 后,就可以写出更加连贯流畅的程序,并在如何合理管理应用资源方面发挥得游刃有余。你的应用程序将会拥有更好的用户体验。 ——摘自《第一行代码》(第二版)

晴空๓ 2612

安卓生命周期

安卓生命周期

KaMeCoo的博客 121

安卓现代化开发系列——从生命周期到Lifecycle

我们从电脑系统的窗口去理解Activity启动一个程序的时候,程序就会在电脑桌面上创建一个窗口,创建的那一瞬间(通常会很快,可能不需要1秒)就相当于Activity的onCreate()。创建完成后,窗口就可以被用户所看见了,被用户看到的那一瞬间就相当于Activity的onStart()。通常来说,一个新启动的程序会自动获得焦点并可被用户交互,因此onStart()之后,窗口会被置顶到顶层,这一瞬间就相当于Activity的onResume()。

maniuT的博客 846
上一篇: Android Activity和Intent机制
下一篇: Android Bundle类
hxwhou
博客等级 码龄16年 100粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值