Android 知识总结:Activity

Activity 生命周期

  1. onCreate(): 正在被创建,常用来初始化工作
  2. onStart():正在被启动,此时可见但不在前台,无法与用户交互
  3. onResume():获得焦点,此时可见且在前台
  4. onPause():正在停止,此时可做一些存储数据、停止动画等工作,但是不能太耗时,因为这会影响到新 Activity 的显示, onPause 必须先执行完,新 Activity 的 onResume 才会执行
  5. onStop():即将停止,可以做一些稍微重量级的回收工作,比如注销广播接收器、关闭网络连接等,同样不能太耗时
  6. onDestroy() :即将被销毁,这是 Activity 生命周期中的最后一个回调,常做回收工作、资源释放;
  7. onRestart():正在重新启动,一般情况下,当前 Acitivty 从不可见重新变为可见时,OnRestart 就会被调用;

延伸:

  • 从整个生命周期来看,onCreate 和 onDestroy 是配对的,分别标识着Activity 的创建和销毁,并且只可能有一次调用
  • 从 Activity 是否可见来说,onStart 和 onStop 是配对的,这两个方法可能被调用多次
  • 从 Activity 是否在前台来说,onResume 和 onPause 是配对的,这两个方法可能被调用多次;

在这里插入图片描述

Activity A 启动另一个Activity B 会调用哪些方法

  1. Activity A 的 onPause()
  2. Activity B 的 onCreate()onStart()onResume()
  3. Activity A 的 onStop()

如果B是透明主题又或者是个DialogActivity,则不会回调 A 的onStop

onSaveInstanceState() 方法的作用 ? 何时会被调用?

调用时机:

  • 系统配置发生改变时导致 Activity 被杀死
  • 内存资源不足导致低优先级的 Activity 被杀死

以上两种场景下会调用该方法,保存当前 Activity 的状态。当 Activity 被重建后,系统会调用 onRestoreInstanceState(),并且把onSaveInstanceState()方法所保存的 Bundle 对象同时传参给 onRestoreInstanceState() ,因此可以在这个方法中进行资源恢复操作。

横竖屏切换的 Activity 生命周期变化

  • 默认情况下,系统会销毁并重新创建 Activity,以适应新的屏幕方向,生命周期如下
    onPause
    onSaveInstanceState
    onStop
    onDestroy
    onCreate
    onStart
    onRestoreInstanceState
    onResume
    
  • 添加 configChanges 属性可避免该销毁重建的默认行为
    <activity android:name=".YourActivity"
        android:configChanges="orientation|screenSize">
        <!-- 其他配置 -->
    </activity>
    
    此时,横竖屏切换后不再重建Activity。同时会调用如下方法:
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
    	super.onConfigurationChanged(newConfig);
    }
    

Activity的四种启动模式、应用场景

  1. standard (标准模式):
    • 行为:每次启动一个 Activity 都会重新创建一个新的实例
    • 应用场景:适用于大多数常规Activity
  2. singleTop (栈顶复用模式):
    • 行为:如果新的 Activity 已经位于任务栈的顶部,则不会创建新的实例,而是调用其 onNewIntent() 方法
    • 应用场景:适用于需要避免重复创建实例的场景,如消息通知的详情页
  3. singleTask (栈内复用模式):
    • 行为:在整个任务栈中,该 Activity 只会有一个实例。如果任务栈中已存在该 Activity 的实例,则系统会将位于该实例之上的所有 Activity 出栈,并使其获得焦点,也会调用其 onNewIntent() 方法
    • 应用场景:适用于作为应用入口的 Activity,如主界面、登录页面等
  4. singleInstance (单实例模式):
    • 行为:与 singleTask 类似,但整个系统中只会有一个实例,并且该实例会运行在一个新的任务栈中
    • 应用场景:通常用于系统级应用,如来电显示、系统锁屏界面等

Activity 的视图层级

在这里插入图片描述

Activity 启动流程

  1. 启动 Activity 的请求会由 Instrumentation 来处理,它通过 BinderAMS 发送请求
  2. AMS 内部维护着一个 ActivityStack 并负责栈内的 Activity 状态同步
  3. AMS 通过 ActivityThread 去同步Activity 的状态从而完成生命周期方法的调用

在这里插入图片描述
详解

Serializable 和 Parcelable 的区别

  • SerializableJava 实现,ParcelableAndroid 特有
  • Serializable 使用简单但开销较大,需要大量 IO 操作
  • Parcelable 使用麻烦但性能较高,是对一个对象进行分解,它分解后的每一部分内容Intent 都是支持的
  • 内存序列化使用 Parcelable,文件存储或网络传输使用 Serializable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值