Android面试闯关——Activity(持续升级中)
android.jpg
1.什么是Activity
Activity是一个可以与客户交互的组件,从功能上来说,它作为应用程序的界面框架,负责动态加载各种客户界面视图,实现底层的消息传递等,不能简单地把Activity简单视为一个屏幕,而应把它看作一个功能强大的界面管理者,它负责调度各种界面视图,帮助开发人员完成Android应用与客户之间的UI交互。从逻辑上来说,Activity是Android应用的组成部分,一个Android应用可以包含多个Activity(当然还包含其余类型的组件如Service、Content Provider等)。
Activity的生命周期以及各个生命周期回调特点
Activity生命周期
onCreate(Bundle savedInstanceState):Activity被启动时调用的第一个方法,在这里做少量初始化数据、设置客户界面等工作
onStart():该方法在onCreate() 方法之后被调用,或者者在Activity从Stopped状态转换为Actived状态时被调用
onResume():在Activity从Paused状态转换到Actived状态时被调用。
onPaused():时机:在Activity从Actived状态转换到Paused状态时被调用。用法:可以在这个方法中持久化对象数据,也可以结束比较耗费CPU时间的操作,比方动画之类的。用这个方法写的代码要尽量效率高少量,假如这个方法没有执行完,新的Activity对象将不会显示出来,由于会影响用户的体验性。也就是说,新的Activity对象必需等待onPause()方法执行完毕后再显示出来。
经典例子:若Activity被另一个透明或者者Dialog样式的Activity覆盖,虽然对客户它依然部分或者一律可见,但它已经失去了焦点,故不可与客户交互,此时被覆盖的Activity是处于onPause状态。onStop():在Activity从Actived状态转换到Stopped状态时被调用。一般在这里保存Activity的状态信息。Activity被另外一个Activity完全覆盖、失去焦点并不可见
onDestroy():在Activity被结束时调用,它是被结束时调用的最后一个方法,在这里一般做些释放资源、清除内存等工作。
2.onSaveInstanceState
调用场景:
- 屏幕旋转
- 被其余Activity覆盖
- 按下home键
onSaveInstanceState()方法并不是每次当Activity离开前端时都会调用的,假如客户使用finish()方法结束了Activity,则不会调用,由于在客户主动退出(如单击返回按钮)的情况下,系统默认为当前的少量状态信息如编辑了一半的短信等是客户已经不需要的,主动放弃的。另外要注意onSaveInstanceState调用在onPause之前。
onRestoreInstanceState:在Activity被覆盖或者退居后端之后,系统资源不足将其杀死,而后客户又回到Activity时,此方法会被调用;在客户改变屏幕方向时,重建的过程中,此方法会被调用。我们可以重写此方法,以便恢复少量临时数据。onRestoreInstanceState调用在onStart之后
3.启动模式
standard是默认的启动模式,假如不指定launchMode属性,就会自动使用这种启动模式
singleTop模式,假如要启动的这个Activity在当前任务中已经存在了,并且还处于栈顶的位置,那么系统就不会再去创立一个该Activity的实例,而是调用栈顶Activity的onNewIntent()方法
singleTask这种启动模式表示,系统会创立一个新的任务,并将启动的Activity放入这个新任务的栈底位置。但是,假如现有任务当中已经存在一个该Activity的实例了,那么系统就不会再创立一次它的实例,而是会直接调用onNewIntent()方法
singleInstance模式启动Activity会先创立一个新的Task,这种Activity所在的Task中始终只会有一个Activity
4.进程的优先级
1.前端进程
前端进程是显示在屏幕最前台并与客户正在交互的进程,是Android系统中最重要的进程,包含以下4种情况。
进程中的Activity正在与客户进行交互。
进程服务被Activity调用,而且这个Activity正在与客户进行交互。
进程服务正在执行公告周期中的回调方法,如onCreate()、onStart()或者onDestroy()
进程的BroadcastReceiver正在执行onReceive()方法。
Android系统在多个前端进程同时运行时,可能会出现资源不足的情况,此时会清理部分前端进程,保证主要的客户界面能够及时响应。
2.可见进程
可见进程指部分程序界面能够被客户看见,却不在前端与客户交互,不响应界面事件(其onPause()方法已被调用)的进程。假如一个进程包含服务,且这个服务正在被客户可见的Activity调用,此进程同样被视为可见进程。
Android系统一般存在一些的可见进程,只有在特殊的情况下,Android系统才会为保证前端进程的资源而清理可见进程。
3.服务进程
服务进程是指包含由startService()方法启动服务的进程。它有以下特性:没有客户界面;在后端长期运行。例如,后端MP3播放器或者后端上传下载数据的网络服务。
Android系统除非不能保证前端进程或者可见进程所必要的资源,否则不强行清理服务进程。
4.后端进程
后端进程是指不包含任何已经启动的服务,而且没有任何客户可见的Activity的进程。这些进程不直接影响客户的体验。
Android系统中一般存在数量较多的后端进程,因而这些进程会被保存在一个列表中,以保证在系统资源紧张时,系统将优先清理客户较长时间没有见到的后端进程。
5.空进程
空进程是不包含任何活跃组件的进程。一般保留这些进程,是为了将其作为一个缓存,在它所属的应用组件下一次需要时,缩短启动的时间。
空进程在系统资源紧张时会被首先清理,但为了提高Android系统应用程序的启动速度,Android系统会将空进程保存在系统内存中,在客户重新启动该程序时,空进程会被重新使用。
5.Activity的启动流程
详见Activity启动流程详解
6.Activity间的通信方式
- EventBus
- Intent
- 广播
- 外部存储(sp 文件 database)
- 全局变量
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Android面试闯关——Activity(持续升级中)