Android面试知识点总结(2)——安卓基础知识篇

在准备安卓的实习面试,自感自己的安卓基础知识掌握的很不好。偶然在微信上看到一个安卓面试知识点总结的文章,虽然只有问题没有答案,但是还是觉得很受用,于是花点时间把所有的问题都回答出来,然后贴在这里为大家服务。


文章主要分为三个篇章,分别是JAVA基础、Android基础和计算机网络基础。本篇文章是解答关于所有Android基础知识的问题:

1、Activity的生命周期和启动模式。

答:Activity的生命周期是个非常基本的问题,首先需要的就是底下的这幅图:


Acivity实际运行起来,需要经过onCreate()、onStart()、onResume()三个阶段,而彻底的被销毁需要onPause()、onStop()、onDestroy()三个阶段。


按键对生命周期的影响:

1)当我们使用BACK键回退到桌面时,我们的应用程序将结束,这个时候调用的方法就是依次是onPause()、onStop()、onDestroy()。如果我们再次启动APP,则会调用onCreate()、onStart()、onResume()三个函数。

2)当我们使用HOME键回退到桌面时,被调用的方法是onPause()、onStop()。再次启动这个APP,调用顺序就是onRestart()、onStart()、onResume()


一般Activity切换的生命周期:

1)ActivityA启动ActivityB:
ActivityA 的生命周期是onPause()->onStop(),ActivityB的生命周期onCreate()->onStart()->onResume()。
2)ActivityB执行finish返回ActivityA:
ActivityB的生命周期onPause()->onStop()->onDestory(),ActivityA的生命周期了onRestart()->onStart()->onResume()

3)如果ActivityB只是Dialog,ActivityA没有被完全遮挡:

ActivityA只调用onPause(),ActivityB不变。

4)ActivityA调用简单的Dialog,生命周期不变化


关于Activity的启动模式,首先我们要知道,当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中。任务栈的堆叠顺序,和用户看到的activity的顺序是一样的。

1)Standard模式(默认):
standard模式是所启动的Activity都是在同一个task容器栈下,不会重新创建新的task容器栈。按物理返回键,退出当前所处活动状态Activity窗口,这样就会从task容器栈中弹出,显示在手机主屏幕上,从而,有非活动状态转换成活动的状态。其次,standard容器栈可能会存在着相同的Activity实例,只有没调用一次startActivity方法,就会创建目标Activity实例对象压入task容器栈。

2.)SingleTop模式
这种模式会考虑当前要激活的Activity实例在任务栈中是否正处于栈顶,如果处于栈顶则无需重新创建新的实例,会重用已存在的实例,否则会在任务栈中创建新的实例。
SingleTop有个不错的用法是防止多次点击创建多个Activity,无论start几次,SingleTop模式能保证栈顶只有一个实例。 如果Activity启动顺序为A->B->B->A->D,栈中的Acitivy为ABAD(当B位于栈顶时,再次启动B的时候,B不会重新创建)
3)SingleTask模式
如果任务栈中存在该模式的Activity实例,则把栈中该实例以上的Activity实例全部移除,调用该实例的newInstance()方法重用该Activity,使该实例处於栈顶位置,否则就重新创建一个新的Activity实例。
singletask模式,特别需要注意了。启动的目标Activity实例如果已经存在task容器栈中,不管当前实例处于栈的任何位置,只要目标Activity实例处于task容器栈中,都可以重用该Activity实例对象,然后,把处于该Activity实例对象上面全部Activity实例清除掉,并且,task容器栈中永远只有唯一实例对象,不会存在两个相同的实例对象。 如果Activity启动顺序为A->B->B->A->D,栈中的Acitivy为AD(当A再次被启动时,A会被移到栈顶,位于A上面的Acitivity全部会出栈)

4)SingleInstance模式
当该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的Activity,都会通过调用实例的newInstance()方法重用该Activity,此时使用的都是同一个Activity实例,它都会处于任务栈的栈顶。此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的Activity。
5)特别需要注意的生命周期onNewIntent
当一个Activity被start,而不需要重新创建时,就会执行onNewIntent生命周期。如果一个Activity的启动模式是SingleTask,我们可以在onNewIntent中执行一些刷新操作等。我们一般会把MainActivity设置为SingleTask,除了保证MainActivity的唯一,还可以利用singleTask的特性做一些清理工作。自动管理栈,销毁无用的Acitivity。

(本题内容大部分转载自)


2、Service的生命周期和两种启动方式。

答:服务可以在后台执行长时间运行操作而不提供用户界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。 此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。 例如,服务可以处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序交互,而所有这一切均可在后台进行。

服务的两种形式及各自的生命周期:
1)启动
当应用组件(如 Activity)通过调用 startService() 启动服务时,服务即处于“启动”状态。一旦启动,服务即可在后台无限期运行,即使启动服务的组件已被销毁也不受影响。 已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。例如,它可能通过网络下载或上传文件。 操作完成后,服务会自行停止运行。
2)绑定
当应用组件通过调用 bindService() 绑定到服务时,服务即处于“绑定”状态。绑定服务提供了一个客户端-服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至是利用进程间通信 (IPC) 跨进程执行这些操作。 仅当与另一个应用组件绑定时,绑定服务才会运行。 多个组件可以同时绑定到该服务,但全部取消绑定后(且没有通过 onStartCommand()),该服务即会被销毁。


服务的四种对应回调方法:
1)onStartCommand()
当另一个组件(如 Activity)通过调用 startService() 请求启动服务时,系统将调用此方法。一旦执行此方法,服务即会启动并可在后台无限期运行。 如果您实现此方法,则在服务工作完成后,需要由您通过调用 stopSelf() 或 stopService() 来停止服务。(如果您只想提供绑定,则无需实现此方法。)
2)onBind()
当另一个组件想通过调用 bindService() 与服务绑定时,系统将调用此方法。在此方法的实现中,您必须通过返回 IBinder 提供一个接口,供客户端用来与服务进行通信。
3)onCreate()
首次创建服务时,系统将调用此方法来执行一次性设置程序(在调用 onStartCommand() 或 onBind() 之前)。如果服务已在运行,则不会调用此方法。
4)onDestroy()
当服务不再使用且将被销毁时,系统将调用此方法。服务应该实现此方法来清理所有资源,如线程、注册的侦听器、接收器等。 这是服务接收的最后一个调用。

(本题内容转自安卓开发者手册)

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值