`

阿里Andorid研发一面:来给我先讲讲Fragment和Activity相关吧

阅读更多

之前在github上更新了些关于面试类的文章,含有从基础到进阶。含有BATJ.字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等应有尽有。还有辅之相关的视频+学习笔记

https://github.com/xiangjiana/androids
好久没更新了,公司电脑太卡了o(╥﹏╥)o。(把所以的知识+每日一题整理成了份983页的PDF)

 

(更多完整项目下载。未完待续。源码。图文知识后续上传github。)
可以点击关于我联系我获取完整PDF
(VX:mm14525201314)

 

一丶Fragment

1 、谈一谈 t Fragment 的生命周期?

参考回答:
Fragment 从创建到销毁整个生命周期中涉及到的方法依次
为:onAttach()onCreate()
onCreateView()onActivityCreated()onStart()onR esume()onPause()onStop()onDestroyView()onDestroy()onDetach(),其中和 Activity 有不少名称相同
作用相似的方法,而不同的方法有:

  • onAttach() 当 Fragment 和 Activity 建立关联时
    调用;
  • onCreateView() 当 fragment 创建视图调用,在
    onCreate 之后;
  • onActivityCreated() 当与 Fragment 相关联的
    Activity 完成 onCreate()之后调用;
  • onDestroyView() 在 Fragment 中的布局被移除时
    调用;
  • onDetach() 当 Fragment 和 Activity 解除关联时
    调用;

2 、谈谈 y Activity 和 和 t Fragment 的区别?

参考回答:
相似点: 都可包含布局、可有自己的生命周期
不同点:

  • Fragment 相比较于 Activity 多出 4 个回调周期,
    在控制操作上更灵活;
  • Fragment 可以在 XML 文件中直接进行写入,也可以
    在 Activity 中动态添加;
  • Fragment 可以使用 show()/hide()或者 replace()
    随时对 Fragment 进行切换,并且切换的时候不会出
    现明显的效果,用户体验会好;Activity 虽然也可
    以进行切换,但是 Activity 之间切换会有明显的翻
    页或者其他的效果,在小部分内容的切换上给用户
    的感觉不是很好;

3 、Fragment 中 add 与 与 replace 的区别(Fragment 重叠)

参考回答:

  • add 不会重新初始化 fragment,replace 每次都会。所以
    如果在 fragment 生命周期内获取获取数据,使用 replace
    会重复获取;
  • 添加相同的 fragment 时,replace 不会有任何变化,add
    会报 IllegalStateException 异常;
  • replace 先 remove 掉相同 id 的所有 fragment,然后在
    add 当前的这个 fragment,而 add 是覆盖前一个
    fragment。所以如果使用 add 一般会伴随 hide()和
    show(),避免布局重叠;
  • 使用 add,如果应用放在后台,或以其他方式被系统销
    毁,再打开时,hide()中引用的 fragment 会销毁,所以依
    然会出现布局重叠 bug,可以使用 replace 或使用 add
    时,添加一个 tag 参数;

4 、 getFragmentManager、 getSupportFragmentManager 、

getChildFragmentManager 之间的区别?
参考回答:

  • getFragmentManager()所得到的是所在 fragment 的 父容器
    的管理器, getChildFragmentManager()所得到的是在
    fragment 里面 子容器的管理器, 如果是 fragment 嵌套
    fragment,那么就需要利用
    getChildFragmentManager();
  • 因为 Fragment 是 3.0 Android 系统 API 版本才出现的组
    件,所以 3.0 以上系统可以直接调用
    getFragmentManager()来获取FragmentManager()对象,
    而 3.0 以下则需要调用 getSupportFragmentManager() 来
    间接获取;

5 、FragmentPagerAdapter 与 与 FragmentStatePagerAdapter 的区别与使用场景

参考回答:
相同点 : 二者都继承 PagerAdapter
不同点 : FragmentPagerAdapter 的每个 Fragment 会持久的保存在 FragmentManager 中,只要用户可以返回到页面
中,它都不会被销毁。因此适用于那些数据 相对静态的
页,Fragment 数量也比较少的那种;FragmentStatePagerAdapter 只保留当前页面,当页面不
可见时,该 Fragment 就会被消除,释放其资源。因此适用
于那些 数据动态性较大、 占用内存较多,多 Fragment 的情
况;

二、Activity

1丶说下 Activity 生命周期?

参考解答: 在正常情况下,Activity 的常用生命周期就只有如下 7 个

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

延伸: 从 整个生命周期来看,onCreate 和 onDestroy 是配对的,分别标识着 Activity 的创建和销毁,并且只可能有 一次调用; 从 Activity 是否可见来说,onStart 和 onStop 是配对的,这两个方法可能被 调用多次; 从 Activity 是否在前台来说,onResume 和 onPause 是配对的,这两个方法可能被 调用多次; 除了这种区别,在实际使用中没有其他明显区别;

2 、 Activity A 启动另一个 Activity B 会调用哪些方法?如果 B 是透明主题的又或则是个 DialogActivity 呢 ?

参考解答: Activity A 启动另一个 Activity B,回调如下

  • Activity A 的 onPause() → Activity B 的 onCreate() →
    onStart() → onResume() → Activity A 的 onStop();
  • 如果 B 是透明主题又或则是个 DialogActivity,则不会回调 A 的onStop;

3 、说下 onSaveInstanceState() 方法的作用 ? ? 何时会被调用?

参考解答:

发生条件:异常情况下( 系统配置发生改变时导致 Activity被杀死并重新创建、资源内存不足导致低优先级的 Activity 被杀死

  • 系统会调用 onSaveInstanceState 来保存当前 Activity 的状态,
    此方法调用在 onStop 之前,与 onPause 没有既定的时序关系;
  • 当 Activity 被重建后,系统会调用 onRestoreInstanceState
    并且把 onSave(简称)方法所保存的 Bundle 对象 同时传参给
    onRestore(简称)和onCreate(),因此可以通过这两个方法判断Activity 是否被重建,调用在 onStart 之后;
     

4 、说下 y Activity 的四种启动模式、应用场景 ?

参考回答:

  • standard 标准模式: 每次启动一个 Activity 都会重新创建一个
    新的实例,不管这个实例是否已经存在,此模式的 Activity 默认
    会进入启动它的 Activity 所属的任务栈中;
  • singleTop 栈顶复用模式: 如果新 Activity 已经位于任务栈的栈顶,那么此 Activity 不会被重新创建,同时会回调 onNewIntent方法,如果新 Activity 实例已经存在但不在栈顶,那么Activity 依然会被重新创建;
  • singleTask 栈内复用模式: 只要 Activity 在一个任务栈中存在,那么多次启动此 Activity 都不会重新创建实例,并回调
    onNewIntent 方法,此模式启动 Activity A,系统首先会寻找是
    否存在 A 想要的任务栈,如果不存在,就会重新创建一个任务
    栈,然后把创建好 A 的实例放到栈中;
  • singleInstance单实例模式: 这是一种加强的 singleTask 模
    式,具有此种模式的 Activity 只能单独地位于一个任务栈中,且
    此任务栈中只有唯一一个实例;

5 、了解哪些 Activity 常用的标记位 Flags ?

参考回答:

  • FLAG_ACTIVITY_NEW_TASK : 对应 singleTask 启动模式,其效果和在 XML 中指定该启动模式相同;
  • FLAG_ACTIVITY_SINGLE_TOP : 对应 singleTop 启动模式,其效果和在 XML 中指定该启动模式相同;
  • FLAG_ACTIVITY_CLEAR_TOP : 具有此标记位的 Activity,当它启动时,在同一个任务栈中所有位于它上面的 Activity 都要出栈。这个标记位一般会和 singleTask 模式一起出现,在这种情况下,被启动 Activity 的实例如果已经存在,那么系统就会回调onNewIntent。如果被启动的 Activity 采用 standard 模式启动,那么它以及连同它之上的 Activity 都要出栈,系统会创建新的Activity 实例并放入栈中;
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS : 具有这个标记的Activity 不会出现在历史 Activity 列表中;

6 、说下 Activity 跟 跟 window , view 之间的关系?

参考回答:
Activity 创建时通过 attach()初始化了一个 Window 也就是
PhoneWindow,一个 PhoneWindow 持有一个 DecorView 的实例,DecorView 本身是一个 FrameLayout,继承于 View,Activty 通过setContentView 将 xml 布局控件不断 addView()添加到 View 中,最终显示到 Window 于我们交互;

7 、横竖屏切换的 y Activity 生命周期变化?

参考回答:

  • 不设置 Activity 的 android:configChanges 时,切屏会销毁当前Activity,然后重新加载调用各个生命周期,切横屏时会执行一
    次,切竖屏时会执行两次;onPause()onStop()onDestory()onCreate()onStart()onResume()
  • 设置 Activity 的 android:configChanges=" orientation",经过
    机型测试
    • 在 Android5.1 即 即 API 3 23 级别下,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
    • 在 Android9 即 即 API 8 28 级别下,切屏不会重新调用各个生命周期,只会执行 onConfigurationChanged 方法
    • 官方纠正后,原话如下
      如果您的应用面向 Android 2 3.2 即 即 API 级别 3 13 或更
      高级别(按照 minSdkVersion 和 targetSdkVersion)

请查看完整的PDF版
(更多完整项目下载。未完待续。源码。图文知识后续上传github。)
可以点击关于我联系我获取完整PDF
(VX:mm14525201314)

 
 
分享到:
评论

相关推荐

    andorid_fragment详细介绍

    5. **界面交互**:Fragment可以有自己的视图层次和事件监听器,与其他Fragment或Activity共享数据和事件。 6. **状态保存**:Fragment支持在Activity回退栈中保存状态,即使Activity被重建,Fragment仍能恢复到之前...

    andorid中的fragment详细介绍及应用

    Fragment之间可以通过setTargetFragment()和getTargetFragment()进行通信,也可以使用Interface回调或EventBus等第三方库来传递消息。同时,Fragment与Activity之间的通信也很重要,可以使用onActivityResult()、...

    andorid 手機recovery: 4EXT Recovery 2.2.7 RC5

    andorid 手機recovery: 4EXT Recovery 2.2.7 RC5 Recovery 安装方法: 1、确保你的机器已经是S-OFF; 2、确保你的存储卡是FAT32格式; 3、将附件PG88IMG.zip下载保存到SD卡根目录 4、将卡插入手机,手机关机; 5、按住...

    Andorid例子源码仿百度贴吧APP应用的Fragment

    在Android开发中,Fragment是应用程序界面的一个可重用组件,它可以在Activity中承载视图和交互逻辑。这个“Andorid例子源码仿百度贴吧APP应用的Fragment”提供了关于如何模仿百度贴吧应用中的Fragment使用方式的...

    ViewPager加载Activity

    然而,在某些特定场景下,我们可能需要使用ViewPager来加载Activity,而非通常的Fragment。例如,"ViewPager滑动切换Activity"的实现,就像在新浪微博的消息模块中看到的效果,用户可以在不同消息之间通过滑动快速...

    根据霖神FragmentDemo解决重叠问题

    Fragment可以独立存在,也可以嵌入到Activity中,使得应用可以在不同屏幕尺寸和配置下灵活调整布局。本示例“霖神FragmentDemo”着重解决了一个常见的问题:Fragment在屏幕旋转时出现的重叠问题。 首先,我们需要...

    android框架fragment

    - 在Activity启动时,关联的Fragment也会经历相应的生命周期,但它们的顺序可能会根据Fragment的状态和Activity的状态变化而有所不同。 3. **Fragment的添加与替换**: - 添加Fragment通常通过调用Activity的...

    【计算机专业-Andorid项目源码100套之】Fragment动画效果

    - 开发者应通过实际操作和调试来理解和优化Fragment动画,例如使用Android Studio的布局查看器(Layout Inspector)和调试工具(Logcat)来检查动画执行情况。 8. **性能优化**: - 考虑到性能和用户体验,合理...

    android-lifecycle:Android Activity Fragment生命周期图

    在努力弄清楚各个部分如何组合之后,我进行了一些研究,并整理了完整的Android Activity / Fragment生命周期图。 它具有两个并行的生命周期(活动和片段),它们按时间垂直排列。 生命周期阶段将按照活动和片段的...

    android Fragment界面框架简单实用

    简单实用的Fragment框架,适用于商城,影音,即时通讯等项目!经测试可用!下载直接运行,如有问题请联系扣扣2691608900!!!

    Android中在代码中动态(用事物)添加Fragment

    在Android应用开发中,Fragment是Android SDK中的一个重要组件,它允许开发者在Activity中创建可重用的UI模块。Fragment的设计使得应用能更好地适应不同屏幕尺寸和配置,如手机和平板。在标题“Android中在代码中...

    andorid打地鼠源码

    理解Android的Activity和Fragment生命周期对构建游戏至关重要。此外,可能会使用到Service或BroadcastReceiver来支持后台功能。 3. **布局设计**:游戏界面通常需要自定义视图和布局。XML布局文件用于定义屏幕上的...

    fragment test

    4. **通信**:Fragment和Activity之间可以通过接口、Bundle参数、监听器或者直接访问成员变量进行通信。但是,推荐使用接口或回调,以保持组件间的松耦合。 5. **生命周期管理**:Fragment有自己的生命周期,包括`...

    FragmentBestPractice_andorid_android_

    在Android开发中,碎片(Fragment)是应用界面构建的一个核心组件,尤其在现代大屏设备和多窗口模式下,它的作用更加突出。`FragmentBestPractice`这个资源可能包含了一系列关于如何有效利用和优化碎片布局的实践...

    andorid Lollipop(5.0)--activity跳转动画

    在Android系统中,Activity的跳转动画是用户体验的重要组成部分,特别是在Android Lollipop(5.0)版本中,引入了全新的Material Design设计语言,这为应用的界面交互带来了丰富的视觉效果和流畅的过渡动画。...

    andorid完整天气源码

    1. **Activity与Fragment**:源码中可能包含多个Activity和Fragment,它们之间通过Intent、Bundle或回调函数进行通信。 2. **ViewModel与LiveData**:使用Android架构组件,如ViewModel来保存UI状态,LiveData进行...

    安卓java读取网页源码-Andorid-learning:Andorid-学习

    Andorid-learning 目录: 0-0 0-1 1-1 1-2 1-3 1-4 0-0 隐藏顶部栏状态栏 在代码 oncreate: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...

    传智播客_Andorid_20天精通Android开发视频_第10天视频

    在本课程"传智播客_Andorid_20天精通Android开发视频_第10天视频"中,我们深入探讨了Android应用开发的核心概念和技术。这个压缩包包含的资源是第10天的视频教程,是整个学习路径中的一个重要阶段。通过这天的学习,...

Global site tag (gtag.js) - Google Analytics