Activity

作者: Dream_Book | 来源:发表于2020-03-25 13:55 被阅读0次

    文章仅做个人笔记使用:

    生命周期:

    onCreater():系统首次创建Activity时调用,接收onSaveInstanceState的数据,设置活动界面布局,初始化成员等一些初始化活动

    onStart():界面正在启动状态,但是不处于前台不可交互。

    onResume():界面可见,可交互。

    onPause():表示界面正在停止,正常情况下紧接着就会调用onStop()方法,但是在快速回到当前界面就会调用onResume()。在这里做一些数据存储关闭动画的操作,但是不能太耗时,否则会影响新的Activity的显示。当前界面的onPause必须执行完新的Activity 的onResume才会执行。从源码中得知,新的Activity启动之前,栈顶的Activity必须先要onPause(),新的Activity 才能启动。

    onStop():界面即将停止,可以做一些重量级的回收工作,也不能太耗时。

    onDestory():界面即将被销毁,做最后的回收工作和资源释放。

    onRestart():表示界面正在重新启动,从不可见变为可见就会调用该方法.

    异常状态下的生命周期:

    横竖屏切换、处于低优先级的Activity被销毁都属于异常关闭,系统都会将Activity销毁后重建。
    onSaveInstanceState():保存简单轻量的界面状态。但是在用户通过显式意图关闭Activity或者通过finish()关闭Activity系统将不会调用该方法。只会在异常关闭的情况下调用。在onStop()之前,相对于onPause()则没有先后顺序。
    onRestoreInstanceState():在onStart()之后调用。
    在onCreater()和onRestoreInsteanceState()中都可以拿到保存的bundle数据,区别是在onRestoreInsteanceStete()一旦被调用就一定会有保存的数据,但是onCreater中可能为空需要做判空处理。

    通过配置configChanges可以阻止Activity的销毁和重建,例如配置android:configChanges="orientation|screenSize" 就可以在屏幕旋转的时候组织Activity的销毁和重建会执行onConfigurationChanged()方法。在Activity被异常关闭的情况下onSaveInstanceState()同样会执行。

    Toast 和 Dialog对Activity的生命周期是没有影响的。

    只有再启动另外一个Activity的时候才会进入onPause状态,而不是想象中的被覆盖或者不可见
    同时通过AlertDialog源码或者Toast源码我们都可以发现它们实现的原理都是windowmanager.addView();来添加的, 它们都是一个个view ,因此不会对activity的生命周期有任何影响。

    启动模式:

    标准模式:每次都会创建实例,并且将实例加入启动他的Activity所在的栈内。
    站顶复用模式:如果被启动的Activity不在启动他Activity的栈顶,就会重新实例化,否则不会重新实例。onNewIntent()会调用。onCreater和onStart不会被调用。
    站内复用模式:单实例模式,默认具有clearTop属性,会让在被启动的实例之上的Activity出栈。
    单实例模式:单实例模式,是站内复用的加强版,系统会为以这种模式启动的Activity单独创建一个任务栈。

    标志位/Flags:

    通过LaunchMode配置启动模式和通过标志位addFlags启动,后者优先级高于前者。并且前者不能为Activity设置FLAG_ACTIVITY_CLEAR_TOP(如果被启动的Activity是通过标准模式启动,那么连同他在内以及在他之上的都要出栈)标识,后者无法设置单实例模式。

    Activity之间通信方式:

    • 通过Intent传递参数,或者进行bundle封装再传递。
    • 借助类的静态成员变量进行传递。
    • 借助全局变量来实现
    • 借助外部存储来实现数据传递。
      SharedPreference
      file
      数据库

    Activity与Serviece之间通信方式:

    1.通过Activity绑定Serviece来进行通信。绑定Service的时候会创建一个ServiceConnection,可以拿到OnBind返回的binder对象。
    2.通过Handler发送消息给Activity.
    3.通过广播发送消息给Activity.

    Activity启动过程:

    涉及Instrumentation(仪器仪表)、ActivityThread和

    ActivityManagerService。
    简单来说启动Activity的请求会由Instrumentation来处理,然后通过Binder向AMS发送请求,AMS内部维护着一个ActivityStack并负责栈内的Activity的状态同步。AMS通过ActivityThread去同步Activity的状态从而完成生命周期方法的调用。

    相关文章

      网友评论

          本文标题:Activity

          本文链接:https://www.haomeiwen.com/subject/tmdayhtx.html