大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
产品的开发是长期的,是迭代的
为七星关区等地区用户提供了全套网页设计制作服务,及七星关区网站建设行业解决方案。主营业务为成都网站建设、网站建设、七星关区网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
每个迭代版本周期不等,有一周,有一个月的,也有可能更长
如果是单独的项目开发一般在1-6月之间吧。
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时,才会将空白模式变成前景模式。
最后附张官方给出的生命周期图来帮助理解:
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 中,多数情况下每个程序都是在各自独立的 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,并且结合其独特的生命周期管理机制同时为开发者和使用者提供最大程度的便利。
单个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栈