ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android基础知识复习(Activity及Fragment)

2019-08-27 13:51:43  阅读:306  来源: 互联网

标签:调用 Fragment 生命周期 onPause Activity android 方法


       前一段时间完成了我的人生大事,Abp相关系列会暂时停止更新一段时间,准备趁着刚开始这段时间,复习一下android相关的基础知识,相关知识就以问题的方式记录下来,具体问题参考了厘米姑娘的相关博客。

  1. Activity的生命周期
    onCreate表示Activity正在创建,常做一些初始化工作,比如setContentView界面资源,初始化数据等。
    onStart表示Activity正在启动,可见却不在前台,无法与用户交互。
    onResume表示Activity可见并处于前台,处于活动状态。
    onPause表示Activity正在停止,可做数据存储、动画停止等操作。
    onStop表示Activity即将停止,可以做一些稍微重量级的回收工作,比如取消网络连接,注销广播接收器等。
    onDestory表示Activity即将销毁,常做资源释放,回收工作。
    另外,当Activity从后台切到前台,由不可见变为可见时,会调用onRestart方法,表示重新启动。

  2. onStart和onResume/onPause和onStop的区别
    具体参考Activity的生命周期,OnStart和OnStop都不可见,OnResume与OnPause都显示在前台。

  3. Activity A启动了Activity B,会调用哪些方法?如果Activity B是完全透明的呢?如果Activity B是对话框呢?
    依次会调用Activity A的OnPause方法——》Activity B的OnCreate方法——》Activity B的OnStart方法——》Activity B的OnResume方法——》Activity A的OnStop方法
    如果Activity B是透明的或者Activity B是对话框,那么不会调用Activity A的onStop方法

  4. onSaveInstanceState方法何时会被调用?onRestoreInstanceState何时被调用
    当非人为终止Activity时,比如系统资源不足导致低优先级Activity被杀死时、或者应用配置发生改变时(比如横竖屏时),
    Activity会调用OnSaveInstanceState方法来保存状态,该方法会调用在onStop方法之前,但和onPause方法没有时序关系。

    当非人为终止的Activity要被重新展示时,系统会重新实例化这个Activity对象,并且从上次保存的bundle中读取保存的数据,恢复Activity的状态,onRestoreInstanceState必定在onCreate方法之后,在OnResume方法之前执行。
    注:恢复状态也可以在OnCreate方法中执行,通过判断OnCreate方法的传参,但不推荐,手动删除这点。

  5. onSaveInstanceState和OnPause的区别
    可以从生命周期出发。
    onSaveInstanceState用于临时性状态的保存,onPause用于数据的持久化保存。

  6. 如何避免Activity在横竖屏切换时被重新创建?
    在AndroidManifest.Xml中对应的Activity文件中,添加属性android:ConfigChanges="orientation|screenSize",此后Activity被横竖屁切换时,就只会调用onConfigurationChange的方法,而不会被杀死再被重建。

  7. Activity的四种启动模式?
    Standard(标准模式):每次启动一个Activity就会创建一个新的实例。
    SingleTop(栈顶复用模式):如果启动的Activity处于栈顶,就不会创建新的对象,而会调用onNewIntent(intent)方法。
    SingleTask(栈内复用模式):如果当前栈内存在此Activity的实例,则直接将此实例弹到栈顶显示,并回调onNewIntent(intent)方法;如果不存在,则创建实例,并压入堆栈。
    SingleInstance单实例模式:具有此模式的Activity只能放到一个栈中,且这个栈只能存放一个这一个实例。

  8. SingleTop和SingleTask适用场景?
    SingleTop:防止多次点击,同一个Activity被创建多个。
    SingleInstance:一个栈中有且仅有一个,常用于主页登录页。

  9. onNewIntent()方法何时被调用?
    查看第七条Activity四种启动模式的SingleTop和SingleInstance方法。

  10. 如何启动其他App的Activity?
    在保证有权限的情况下,通过隐式意图的方式调用,只要与Activity的IntentFilter匹配即可(只要与Activity多组IntentFilter(包括Action、Category和Data)中的一组匹配即可)。

  11. Activity的启动过程?
        startActivity会经过重重方法会转移到ActivityManagerService的startActivity方法,并通过IPC(进程间通信)回到ActivityThread的内部类。
        ActivityThread中,并调用scheduleLaucheActivity方法将启动Activity方法的消息发送并交给Handle H进行处理。
        Handle H对消息的处理会调用handleLaunchActivity->perfoemLaunchActivity得以完成对Activity的创建和启动。

  12. Fragment的生命周期?
    onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume->onPause->onPause->onStop->onDestoryView->onDestory->onDetach,其中与Activity有很多相同的方法,不同的方法包括:
    onAttach:当Fragment与Activity建立关联时调用
    onCreateView:当Activity创建视图时调用
    onActivityCreate:当与fragment关联的Activity完成onCreate后调用
    onDestoryView:当Fragment中的布局被移除时调用
    onDetach:当Activity与Fragment解除关联时调用

  13. Activity与Fragment的异同点
    相似点:Activity与Fragment都包含布局,有自己的生命周期,fragment可以看成迷你的Activity
    不同点:1.Fragment依附于Activity,多了与Activity关联的相关方法,如Attach等
                   2.Activity的生命周期是有宿主Activity调用而不是操作系统调用的,从Activity生命周期是protect修饰,而Fragment生命周期是public修饰可以看出

  14. Activity与Fragment的关系?
    1.正如Fragment的名字“碎片”,他的出现为了解决安卓的碎片化,可以作为界面的组成部分,在Activity中动态的加入、交换和替换。
    2.一个界面可以包含多个Fragment,一个Fragment也可以被多个界面使用
    3.另外,Activity的FragmentManager负责调用队列中的Fragment的生命周期,保持fragment与Activity的状态和生命周期一致。

  15. 何时考虑使用Fragment?
    比如ViewPager+Fragment实现底部导航,比如横竖屏界面

标签:调用,Fragment,生命周期,onPause,Activity,android,方法
来源: https://blog.csdn.net/war3ismylove/article/details/100090943

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有