为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 Android面试闯关——Ac...

Android面试闯关——Activity(持续更新中)

2019.02.24 20:53 621浏览

webp

android.jpg

1.什么是Activity

Activity是一个可以与用户交互的组件,从功能上来说,它作为应用程序的界面框架,负责动态加载各种用户界面视图,实现底层的消息传递等,不能简单地把Activity简单视为一个屏幕,而应把它看作一个功能强大的界面管理者,它负责调度各种界面视图,帮助开发人员完成Android应用与用户之间的UI交互。从逻辑上来说,Activity是Android应用的组成部分,一个Android应用可以包含多个Activity(当然还包含其他类型的组件如Service、Content Provider等)。

Activity的生命周期以及各个生命周期回调特点

webp

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系统会将空进程保存在系统内存中,在用户重新启动该程序时,空进程会被重新使用。



作者:钟离四郎
链接:https://www.jianshu.com/p/01800ce8a3d1


点击查看更多内容
0人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
手记
粉丝
217
获赞与收藏
1047

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

50篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

146篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消