资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

android周期,安卓手机使用周期

如何理解Android中Activity的三个“生命周期”?

下图是官方文档里的Activity生命周期图,其中彩色标出的四个框是Activity的四种状态,当Activity的状态改变时会触发一个或多个onXXX()方法。

10年积累的网站设计制作、网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有宜丰免费网站建设让你可以放心的选择与我们合作。

onCreate()

当Acitivity第一次被创建时触发,一般在这里要做的事情包括创建视图(setContentView())、向视图填充必要的数据等等。

onRestart()

这个我比较少用到,按文档上的介绍,如果Activity之前被stop过,那么下一次onStart()方法之前会先触发这个方法。

onStart()

只要Activity从不可见变成可见,就会触发到这个方法,但被AlertDialog遮挡/显示的情况不算在内。

onResume()

当Activity来到最上层的时候,也就是开始与用户直接交互时,触发这个方法。例如本来Activity被一个AlertDialog遮挡,当这个AlertDialog消失时,onResume()方法就被触发。

onPause()

和onResume()的触发条件刚好相反,如果Activity本来在最上层,当它要让出最上层的位置时会触发这个方法。onPause()和onResume()是被触发最频繁的两个方法,所以在这里不应该执行过于消耗资源的方法。

onStop()

当有其他Activity覆盖了当前Activity时,不论另一个Activity是新开始的还是从下层移至最上层的,当前Activity的onStop()方法都会被触发。

onDestroy()

Activity生命周期的终点。有两种情况会导致它被触发:1)执行了Activity#finish()方法;2)Android系统由于资源不足等原因决定杀掉Activity所在进程。通过isFinishing()方法可以判断出是哪种情况。在这个方法里,我们一般要做的事情是释放Activity占有的资源,例如后台正在进行的下载线程等等。

最后,举个实际例子来说明,假设你有一个“首页Activity”和一个“编辑页Activity”。

•当用户点击首页里的“开始编辑”按钮时,首页的onPause()-onStart()onStop()依次触发,编辑页的onCreate()-onStart()-onResume()依次触发;(感谢James.H.Fu指出的错误)

•当用户在编辑页按下“返回”按钮时,编辑页的onPause()-onStop()依次触发,之后首页的onStart() - onResume()依次触发;

•这时用户在首页按下“返回”按钮,首页的onPause()-onStop()-onDestroy()依次触发。

android开发产品开发周期多久

产品的开发是长期的,是迭代的

每个迭代版本周期不等,有一周,有一个月的,也有可能更长

如果是单独的项目开发一般在1-6月之间吧。

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,并且结合其独特的生命周期管理机制同时为开发者和使用者提供最大程度的便利。

android activity什么周期可见

Android中Activity的生命周期可以分为四类:

foreground process(前景模式)

visible process(可见模式)

background process(背景模式)

empty process(空白模式)

参考官方给出的生命周期图可以知道Activity的生命周期分为7个方法

onCreate()、onStart() 、onResume()、 onPause()、onStop()、onDestory() 、onRestart()

其中前景模式是由onCreate(创建)、onStart(启动) 、onResume(可见可交互)三个方法来体现的。而可见模式则分为两种状态,一种是被Dialog覆盖,进入透明模式,在onPause(暂停)可以体现出来,第二就是如果当前Activity被完全覆盖,就会进入onStop状态,完全不可见,当覆盖物消失时会调用onRestart方法来唤醒该Activity,由覆盖状态重新变为可见状态,并重新执行onstart()和onResume()重新变为可见可交互状态。

如果Activity被完全覆盖的话,也就是所谓的第三种状态,背景模式。此时的Activity有两种处理方案可以使用,第一方案是调用onDestory()方法完全销毁当前的Activity。第二方案就是清除掉当前的Activity,并重新执行onstart()和onResume()重新变为可见可交互状态。

如果Activity被完全覆盖,并且系统需要内存时,就会暂时销毁Activity,进入空白模式,空白模式最重要的目的就是暂时释放出内存,直到使用者再度唤醒空白模式的 Activity时,才会将空白模式变成前景模式。

最后附张官方给出的生命周期图来帮助理解:

Android基础之Activity生命周期

Activity是Android最常用的四大组件之一,Activity是Android应用中与用户交互的界面,通常一个activity就是一个屏幕,Activity一共有四种状态,Active/Running(当Activity可见且可以与用户交互);Paused(当Activity可见但是不可交互);Stoped(当Activity被完全覆盖不可见);Killed(当Activity被系统从内存中删除).其生命周期如下图:

相关方法及作用:

1 onCreate:当Activity创建时仅且调用一次,该方法主要适用于初始化页面。

2 onStart:当Activity调用onCreate方法之后,然后调用此方法开启Activity,Activty此时可见但不可交互。

3 onResume:此时Activity在前台可见且可与用户交互。适合做UI更新操作。

4 onPouse:当Activity被另外一个Activity覆盖时调用该方法。

5 onStop:当Activity在前台不可见或者Activity在销毁前调用此方法,此方法适合做一些资源的回收操作。

6 onDestroy:当activity被销毁时调用此方法。

问题:

1)onCreate 和 onStart 方法的区别

a.执行次数不同,onCreate只执行一次,而onStart可以执行多次。

b.在activity的状态不同,onCreate被调用时Activity的状态还是未可见,而调用onStart时已可见。

2) onStart 和 onStop的区别

在执行onStart或者onStop时,Activity都是不可交互的,执行onStart时Activity在前台不可见,在后台可见。而执行onStop时Activity前后台都不可见。

3)onResume 和 onPouse的区别

在执行onResume时,Activity在前台是可见的且可以与用户交互的。而执行onPouse时Activity在前台有可能可见,Activity没有获取到焦点,此时不可与用户交互。

android的生命周期

单个Actiivty正常的生命周期

onCreate - onStart - onResume - onPause - onStop - onDestory

这就是一个Activity从被创建到被销毁过程。

其中正常运行状态为onResume

当Activity从前台被置于后台,

onResume - onPause - onStop

当从后台重新置于前台

onStop - onPause - onResatrt - onStart- onResume

其中可以发现,只要Activity置于前台都会执行onStart函数,所以我们可以考虑在这里做一下需要在前台就处理的逻辑

各个生命周期函数:

onCreate: Activity被创建,此时Activity处于不可见、不可交互

onStart: 此时Activity 部分可见不可交互

onRestart: Activity从后台重新回到前台,部分可见不可交互

onResume: 完全可见可交互,为Activity正常运行状态

onPause: Activity处于暂停,从前台被置于后台 部分可见部分不可见,不可交互

onStop: 完全置于后台,完全不可见,

onDestroy: Activity被销毁

上面就是一个正常的Activity的生命周期,

在Activity生命周期中,还设计一些其他:

Activity旋转:

onCreate - onStart - onResume

此时被旋转

- onPause - onSaveInstanceState - onStop - onDestroy - onCreate - onStart - onRestoreInstanceState - onResume

可以发现当Activity被旋转时,整个Activity是被销毁然后重新创建的。其中新增调用了两个生命周期函数

onSaveInstanceState: 当Activity被系统异常销毁时被调用,用于存储数据,用于系统恢复Activity时恢复数据

onRestoreInstanceState: 当Actiivty被系统异常销毁并重新创建时,取出在onSaveInstanceState时存储的数据

注意,在onCreate函数中,其实也是有参数的

此处的savedInstanceState也是在onSaveInstanceState时存储的数据,但此处可能为nll,

因为在正常的Activity时,此处就是null,只有在Activity被异常销毁然后被系统重新创建时,此处才有值。

如果要在此处使用,切记要判空。

onNewIntent与Activity的启动模式有关

当Activity未设置启动模式时,则不会触发该生命周期函数

当Activity已经处于应用的Activity栈中

onNewIntent只会在Activity设置了启动模式,并且Activity被复用时才会调起。

注意:只对startActivityForResult调起的Activity起作用,statActivity本质调用的也是startActivityForResult,Activity正常的切换前后台时不会触发的。

A - B:

A正常运行处于 onResume,打开B

A onPause - B onCreate - B onStart - B onResume - A onStop

点击跳入B页面, 首先A进入暂停,B开始创建,到onResume完全可见可交互,于是A被完全遮挡,变成完全不可见、处于后台,进入onStop

A - B -goBack- A

在B页再执行返回

B onPause - A onRestart - A onStart - A onResume - B Stop - B onDestory

和A进入B类似,B返回A时,B进入暂停,A变得重新可见到A完全可见,进入onResume,然后B进入停止,并销毁

B启动模式设置为 SingleTop,B - B

B onPause - B onNewIntent - B onResume

因为 B已经处于栈顶,启动模式为 SingleTop 则不会重新创建B的实例

将A的启动模式设置为SingleTask

可以通过在andorid studio的终端 Terminal中输入:adb shell dumpsys activity

查看当前应用的Activity task栈


文章标题:android周期,安卓手机使用周期
网站路径:http://cdkjz.cn/article/dsgosji.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220