美文网首页
开发艺术探索—Activity的生命周期和启动模式

开发艺术探索—Activity的生命周期和启动模式

作者: leap_ | 来源:发表于2020-04-01 14:02 被阅读0次

    Activtiy的启动涉及AMS,ActivityThread,Instrumentation,首先由Instrumentation通过Binder通知AMS,在AMS的内部有一个ActivityStack管理栈内的Activty,AMS通过ActivityThread同步Activity的状态完成生命周期方法的调用;

    当启动一个新的activity的时候,会先调用当前栈顶的activity的onPause(),然后在调用新的activity,最后stop旧activity;

    注意在onPause中不可以做耗时操作,会影响新activity的显示

    启动模式

    Task任务栈

    activity可以理解为Application中的一个页面,是App层面的,task是操作系统层面存放activity的一个栈,在安卓手机的menu按键下出来的后台界面里的就是一个task任务栈;


    • Standard:

    每次都会新建一个activity实例,当从非Activity的context启动activity时,需要带new_task的flag;当启动一个带有affinity的activity,如果这个activity已经有实例存在该task,则不会重新创建;

    • SingleTop:

    如果栈定存在这个activity实例,就不会创建,会调用onNewIntent(),并且,onStart()和onResume()也不会调用,如果栈顶不存在(有实例不在顶部或者没有实例)就会新建一个activity,调用create,start,resume;

    SingleTask:

    当前任务栈中只能存在一个实例,如果有就不新建实例,将当前实例上的activity抛出(clearTop),并回调onNewIntent(),

    SingleInstance:

    当前activity的实例独享这个任务栈

    使用场景
    LaunchMode 使用场景
    singleTop 登录页面,通知的内容显示页面
    singleTask MainActivity页面,webview页面,扫一扫页面,支付页面
    singleInstance 锁屏页,电话通话页面,闹钟响铃页面

    Flags

    除了在manifest中配置Activity的启动模式,还可以在代码中通过intent指定Flag,代码中的优先级大于manifest,这样的原因是manifest只有Activity的开发者能设置,可是如果使用者需要设置就无法改变manifest,使用只能通过intent配置,下面介绍几个常见的Flag;

    • FLAG_ACTIVITY_NEW_TASK:指定singleTask启动模式
    • FLAG_ACTIVITY_SINGLE_TOP:指定singleTop启动模式
    • FLAG_ACTIVITY_CLEAR_TOP:清除在task中上面的activity

    相关文章

      网友评论

          本文标题:开发艺术探索—Activity的生命周期和启动模式

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