Android知识点 : Acitivity

一、什么Acitivity?

      概念:提供给用户可见界面、可操作的android组件

 

二、Acitity 的四种状态 

     running 、pause 、stop 、kill

1、running : 用户可见可操作的状态,比如正在前台操作的activity

2、pause : 用户可见 或者 不完全不可见但不可操作的状态、比如被覆盖一层透明Activity A的Activity B 就是处理这种状态

3、stop :用户完全不可见、切不可操作的状态,比如home键后挂起的acitivty

4、kill : 被杀死的状态。当 内存不足的时候或者主动kill的时候就会处于kill状态

三、生命周期

 1、activity 启动的时候:onCreate()<onStart()<onResume()

          onCreate():此周期负责初始化一些数据,用户不可见

           onStart () : 用户可见,但不可操作

            onResume() : 用户可见且可操作  

  2、按下home键 : onPause()<onStop()

  3、重新回到界面:onReStart()<onStart()<onResume

  4、kill掉activity : onPause()<onStop() <onDestroy()

  5、重新利用时 : onNewIntent()

  6、切换横屏的时候:

                                    不设置configChange属性时,切换竖屏,生命周期重新执行一次生命周期。切换横屏时重新执行两次

                                     设置configChanges = "oritation"时,切换横竖屏都重新执行一次生命周期

                                     设置configChanges = "oritation|sreenSize|keyboardHidden"时,不执行生命周期,执行onConfigurationChanged方法

三、进程优先级

优先级从高到低依次是: 前台进程》》可见进程》》服务进程》》后台进程》》空进程

 

四、任务栈

按照先进先出的顺序的栈结构

 

五、启动模式

activity创建后,系统会把activity添加新的activity或着重新利用老的activity,根据页面需求设置合理的启动模式有利于减少系统消耗。

1、stander 模式

     系统默认的启动模式。无论任务栈中存不存在目标Activity的实例,都依次生成一个新的Activity实例添加到任务栈顶。此种启动模式比较消耗系统内存。

2、singleTop 模式

      如果栈顶中存在目标activity的实例,那么将不会重新生成新的activity,而是重复利用旧的activity

3、singleTask模式

      如果任务栈中存在目标activity的实例,那么将回重新把该activity重新放到栈顶,在这个之上的acitivty将会被清除出任务栈

4、singleinstance 模式

     只运行一个任务栈中存在一个该activity的实例,如果要重新启动该activity,将会新开启一个新的任务栈,重新生成目标acitivty再把该activity放进新生成的任务栈栈顶

总结:stander模式和singleinstace比较消耗系统内存,慎用。不过也要根据具体业务需求再选择合适的启动模式。

 

 

    六、点击桌面app启动过程源码分析

参考:https://www.jianshu.com/p/6037f6fda285

个人理解:

                当手机开机的时候,加载完linux内核之后,会启动一个init的进程,其他进程都是这个init进程直接或者间接fork出来的,init进程初始化运行之后,它会fork一个一个叫zygote的进程,这个进程很重要,其他进程都是进程fork出来的,也就是他的子进程。zygote进程运行之后会fork出一个叫systemService的进程,这个进程也很重要,运行之后他会开启ActivityManagerService、PagekeManagerService、WindowManagerService等其他服务进程。之后还会开启一个Langh的桌面进程,laugh也是一个应用程序,跟我们的普通的app没太大区别。当我们点击手机的图标的时候,其实就是点击其中的按钮,让其去启动Activity,过程和我们在app内去startActivity的差不多。

startActivity这个过程是AMS和ActivityThread等相互协助的过程。startActivity过程追究源码是启用了intrumentation的execStartActivty的方法。让ActivityThread与AMS通信,通知要开启一个Activity,这个过程是跨进程的过程,他们之间的通信方式Binder。AMS收到要开启Activity的消息后,检查Activity的合法性,没有该进程,则通知Zygote进程再去fork一个我们app的进程,然后根据ActivityRecord的信息,将Activity放进ActivityStack栈中。接下来的生命周期也都是ActivityThread和ASM之间协调的过程了。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值