前一段时间完成了我的人生大事,Abp相关系列会暂时停止更新一段时间,准备趁着刚开始这段时间,复习一下android相关的基础知识,相关知识就以问题的方式记录下来,具体问题参考了厘米姑娘的相关博客。
-
Activity的生命周期
onCreate表示Activity正在创建,常做一些初始化工作,比如setContentView界面资源,初始化数据等。
onStart表示Activity正在启动,可见却不在前台,无法与用户交互。
onResume表示Activity可见并处于前台,处于活动状态。
onPause表示Activity正在停止,可做数据存储、动画停止等操作。
onStop表示Activity即将停止,可以做一些稍微重量级的回收工作,比如取消网络连接,注销广播接收器等。
onDestory表示Activity即将销毁,常做资源释放,回收工作。
另外,当Activity从后台切到前台,由不可见变为可见时,会调用onRestart方法,表示重新启动。 -
onStart和onResume/onPause和onStop的区别
具体参考Activity的生命周期,OnStart和OnStop都不可见,OnResume与OnPause都显示在前台。 -
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方法 -
onSaveInstanceState方法何时会被调用?onRestoreInstanceState何时被调用
当非人为终止Activity时,比如系统资源不足导致低优先级Activity被杀死时、或者应用配置发生改变时(比如横竖屏时),
Activity会调用OnSaveInstanceState方法来保存状态,该方法会调用在onStop方法之前,但和onPause方法没有时序关系。
当非人为终止的Activity要被重新展示时,系统会重新实例化这个Activity对象,并且从上次保存的bundle中读取保存的数据,恢复Activity的状态,onRestoreInstanceState必定在onCreate方法之后,在OnResume方法之前执行。
注:恢复状态也可以在OnCreate方法中执行,通过判断OnCreate方法的传参,但不推荐,手动删除这点。 -
onSaveInstanceState和OnPause的区别
可以从生命周期出发。
onSaveInstanceState用于临时性状态的保存,onPause用于数据的持久化保存。 -
如何避免Activity在横竖屏切换时被重新创建?
在AndroidManifest.Xml中对应的Activity文件中,添加属性android:ConfigChanges="orientation|screenSize",此后Activity被横竖屁切换时,就只会调用onConfigurationChange的方法,而不会被杀死再被重建。 -
Activity的四种启动模式?
Standard(标准模式):每次启动一个Activity就会创建一个新的实例。
SingleTop(栈顶复用模式):如果启动的Activity处于栈顶,就不会创建新的对象,而会调用onNewIntent(intent)方法。
SingleTask(栈内复用模式):如果当前栈内存在此Activity的实例,则直接将此实例弹到栈顶显示,并回调onNewIntent(intent)方法;如果不存在,则创建实例,并压入堆栈。
SingleInstance单实例模式:具有此模式的Activity只能放到一个栈中,且这个栈只能存放一个这一个实例。 -
SingleTop和SingleTask适用场景?
SingleTop:防止多次点击,同一个Activity被创建多个。
SingleInstance:一个栈中有且仅有一个,常用于主页登录页。 -
onNewIntent()方法何时被调用?
查看第七条Activity四种启动模式的SingleTop和SingleInstance方法。 -
如何启动其他App的Activity?
在保证有权限的情况下,通过隐式意图的方式调用,只要与Activity的IntentFilter匹配即可(只要与Activity多组IntentFilter(包括Action、Category和Data)中的一组匹配即可)。 -
Activity的启动过程?
startActivity会经过重重方法会转移到ActivityManagerService的startActivity方法,并通过IPC(进程间通信)回到ActivityThread的内部类。
ActivityThread中,并调用scheduleLaucheActivity方法将启动Activity方法的消息发送并交给Handle H进行处理。
Handle H对消息的处理会调用handleLaunchActivity->perfoemLaunchActivity得以完成对Activity的创建和启动。 -
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解除关联时调用 -
Activity与Fragment的异同点
相似点:Activity与Fragment都包含布局,有自己的生命周期,fragment可以看成迷你的Activity
不同点:1.Fragment依附于Activity,多了与Activity关联的相关方法,如Attach等
2.Activity的生命周期是有宿主Activity调用而不是操作系统调用的,从Activity生命周期是protect修饰,而Fragment生命周期是public修饰可以看出 -
Activity与Fragment的关系?
1.正如Fragment的名字“碎片”,他的出现为了解决安卓的碎片化,可以作为界面的组成部分,在Activity中动态的加入、交换和替换。
2.一个界面可以包含多个Fragment,一个Fragment也可以被多个界面使用
3.另外,Activity的FragmentManager负责调用队列中的Fragment的生命周期,保持fragment与Activity的状态和生命周期一致。 -
何时考虑使用Fragment?
比如ViewPager+Fragment实现底部导航,比如横竖屏界面