美文网首页
Android 面试必备--Activity

Android 面试必备--Activity

作者: OyeAndroid | 来源:发表于2020-09-09 17:43 被阅读0次

    1.Activity生命周期:

    onCreate()->onStart()->onResume()->onPause()->onStop->onDestory()或(onRestart() ->onStart()->...)

    onStart(),onStop() 调用时页面不可见,onResume,onPause()调用时页面可见

    2.Activity 4种启动模式

    1.Standard:标准模式(Activity默认启动模式),每次启动Activity会在Activity栈顶创建一个新的实例.因ApplicationContext没有任务栈,所以无法使用标准模式启动Activity,但可以为新的Activity指定新的标记位FLAG_ACTIVITY_NEW_TASK,创建一个新的任务栈(实际上是以SingleTask模式启动的)
    2.SingTop:栈顶复用,若新建的Activity位于栈顶,则此Activity不会重建,而是复用栈顶实例即不会调用onCreate(),onStart().而是调用onNewIntent(),否则就新建此Activity实例并置于栈顶
    3.SingleTask:栈内复用,查看该Activity想要的任务栈是否存在(通过TaskAffinity属性指定Activity想要的任务栈),若不存在则新建一个任务栈并将此Activity置于栈顶,若存在则将此栈中Activity实例以上的Activity全部出栈,使该Activity置于栈中并调用onNewIntent()
    4.SingleInstance:单例模式,SingleTask模式的加强版,直接创建一个新的任务栈,创建该Activity置于栈中.一旦该模式的Activity实例已存在于某个栈中,任何应用激活该Acticity都会复用该栈中的实例,即多个应用共享该栈中的Activity实例

    4种启动模式的区别:
    ①standard,singleTop允许多个Activity实例,而singTask,singleInstance 只允许一个实例
    ②standard每次都会新建Activity实例,而SingTop取决于Activity实例是否存在栈顶,SingleTask取决于Activity实例是否存在栈内,SingleInstance只会实例化一次
    ③Activity存储的目标栈:standard,singleTop和收到的intent处于同一个栈,SingleTask取决于TaskAffinity,SingleInstance总是新建任务栈
    ④只有SingleInstance独占一个任务栈,其他的可以存在其他Activity实例

    3.Activity启动过程(当请求启动Activity时)

    ①Launcher进程通过Binder驱动向ActivityServiceManager(AMS)发起startActivity请求
    ②AMS收到请求后向ActivityStack发送启动Activity的请求
    ③ActivityStack记录需启动的Activity的信息,并调整Activity栈将其置于栈顶,通过Binder驱动将Activity的启动信息传递到ApplicationThread线程中(即Binder线程)
    ④ApplicationThread线程通过Handler将Activity的启动信息发送到主线程ActivityThread
    ⑤主线程ActivityThread类接收信息和请求后通过ClassLoader机制加载对应的Activity类,最终调用Activity的onCreate()方法,最后启动完毕

    Lancher(Binder驱动)->AMS->ActivityStack(记录信息,栈内置顶,Binder驱动发送信息 )->ApplicationThread(handler发送信息)->ActivityThread(classloader加载Activity信息)

    4.Activity卡顿分析

    1.内存泄漏

    如非静态内部类,匿名内部类,资源使用完未关闭,Handler等

    2.加载大数据

    如图片资源Bitmap,解决方案:压缩图片(根据显示的bitmap宽高设置采样率),缓存图片(LruCache算法)

    3.UI线程做耗时操作

    如数据库操作,数据计算,解决方案:开子线程处理耗时任务

    4.UI视图过度绘制

    解决方案:减少视图层级,使用include,merge,ViewStub加载视图

    5.Activity启动速度优化

    减少onCreate()时间,将onCreate()部分代码放到onResume()实现,为防止以后多次调用onResume()造成卡顿,可设置一个开关,在Oncreate里设置为true , onResume()初始化完成置为false

    相关文章

      网友评论

          本文标题:Android 面试必备--Activity

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