是什么?

acntivity是一组包含用户界面的组件,主要用于和用户进行交互的。也就是用户看得到的东西就是activity

 

Activity是怎么回退的:

android是使用任务task去管理activity的,

Android中的activity是层叠显示的,每启动一个activity,新的activity就会覆盖在旧的上面,如果按下返回按钮,就会销毁最上层的,这是在这层下面的就会显示出来。。

 

Activity的4种状态:

运行状态:

这时activity在栈顶,对用户是可见的,系统无论如何,也不会去回收一个正在运行的activity。

 

暂停状态:

Ativity不在栈顶了,仍然可见的时候,这个时候处于暂停状态,比如弹出一个dialog的时候,这个时候栈顶的activity就是暂停状态,但是对用户还是可见的,系统会在内存极低的时候,回收掉这个activity。

 

停止状态:

Ativity不在栈顶了,并且完全不可见的时候,就进入了停止状态,系统会对这类活动进行短暂的保活,并不是完全可靠的,如果其他地方需要内存的时候,处于停住状态就会被回收。

 

销毁状态:

当从返回栈中移除后,就变成了销毁状态,系统最喜欢回收这种东西了。

 

Activity的生命周期。

 

OnCreate()

第一次创建的时候调用。一般用来做一些出数据的操作。比如,加载布局,初始化事件。。

 

OnStart()

在不可见准备变为可见的时候调用。

 

OnResume()

可见,并且有焦点交互的时候,这个时候,这个activity一定在返回栈的栈顶。并且处于运行状态。

 

OnPause()

系统准备去启动||恢复另外一个activity的时候调用,

 

OnStop()

在activity完全不可见的时候调用,

一般在这里都会把一些在当前这个activity的耗损资源的一些操作释放了,和保存一些关键的数据。这个方法一定要快,不能超过10秒,否者系统就会报ARN了。

和上面的区别在,如果打开新的活动是一个dialog,那么OnPause会执行,onStop不会执行。

 

OnDestroy()finish的时候调用

销毁之前调用,之后这个activity的状态就是销毁状态了。

 

OnRestart()

由停止状态变为运行状态之前调用,就是重启的时候调用,

 

OnSaveInstanceState()

只有在activity即将销毁的时候,并且有机会重新显示的时候才会调用,正常生命周期不会调用。

 

生命周期的3种场景划分

完整生命周期:

从onCreate--->OnDestroy。。一般情况下,onCreate方法中完成初始化操作,onDestroy完成释放的操作。

 

 

可见周期:

 

OnStart-->OnStop(),这段周期内,对用户是可见的,并不一定需要和用户交互,

 

前台周期:

 

OnCreate-->OnResume(),这段周期,是可以和用户交互的周期,activity经常会在onPause和OnResume中交互很频发,列如,切换到后台,切回来,锁屏,来电话了,被遮挡了,多app切换来回,等等,所以一般建议这两个方法应当非常简洁,不应该有耗时操作。。

 

异常生命周期:

                                            

OnPause-->onSaveInstanceState(bundle)--->OnStop->onDestory-->onCreate(bundle)---OnResume()

 

但是在onStop被调用之前系统会调用onSaveInstanceState(bundle)保存数据,这个方法只会在activity异常终止情况下才会调用,

,如果出现异常周期,那onCreate的bundle一定不会是空的。

  

情况1.资源相关的系统配置发生改变导致Activity被杀死并重新创建(如横竖屏切换)

这种情况,可以通过配置configChanges来解决,

 

情况2:资源内存不足导致低优先级的Activity被杀死

无法避免,做好数据恢复。

 

 

回收场景优先级:

1.Android不会回收正在处于可见状态的的activity

2.内存不够的时候,会回收不可见的Activity。如果被回收了,这个activitu会自动调用OnSaveInstanceState,这个办法,用来保存数据的,

 

前台<---可见但非前台(dialog)<---后台(被暂停的Activity)

 

 

4种启动模式

 

可以通过设置activity的launchMode来指定启动模式。

 

Standard:默认的模式

不值得的情况下,默认就是这种。

每开启一个新的activity,系统就会创建一个新的活动,插入栈顶,并且显示,后进先出,不管栈里有没有。

 

 

SingleTop栈顶复用模式

如果发现栈顶已经存在,就不会再创建了。

如果不在栈顶,那还是会重复创建。

 

SingleTask栈内复用模式

如果栈有,直接使用,不会创建,并且在该栈上面的activity全部出栈,

 

SingleInstance:单一实例模式

他会运行在自己单独,独立的任务栈里面,

更多相关文章

  1. android文本内容自动朗读实例教程
  2. Android之Media播放器源码分析(framework——native)
  3. Android(安卓)启动Service监听网络状态
  4. Android:异步调用详解
  5. android EditText不自动弹出软键盘
  6. Android与H5交互,以及WebView加载进度条
  7. Android(安卓)AIDL(Android(安卓)Interface Definition Language
  8. Android横竖屏相关
  9. Invalidate和postInvalidate的区别

随机推荐

  1. cocos2d-x 里获取 android apk icon
  2. android学习—— context 和 getApplicat
  3. Android画廊效果
  4. 利用virtualbox安装android系统
  5. Android(安卓)Fragment实现按钮间的切换
  6. LibGDX输入模块之振荡器
  7. 获取Android崩溃crash信息并写入日志发送
  8. 【React Native开发】React Native For A
  9. Android(安卓)Edittext获取焦点和失去焦
  10. android 5.0 安装APP 出现 Failure [INST