Android面试必备(1),四大组件之Activity

前言

接下来我将重新回顾Android的核心基础,俗话说万变不离其宗,想必是时候开始总结归纳了。

面试官:什么是Activity?
我:。。。

面试官:阐述一下 Activity 的生命周期?
我:。。。

面试官:从Activity A跳转到Activity B之后,然后再点击back建之后,它们的生命周期调用流程是什么?
我:。。。

面试官:知道Activity的启动流程吗?
我:。。。

看似简单,却只答出个大概,也许这只是平时少总结罢了。

目录

  • Activity生命周期
  • Activity任务栈
  • Activity启动模式
  • scheme跳转协议

1、Activity生命周期:

关于Activity的生命周期,离不开经典的流程图
Android面试必备(1),四大组件之Activity_第1张图片

  • Activity的4种状态
    running(活动状态):
    处于可见并可和用户交互的状态。
    pause(暂停状态):
    这个状态Activity在屏幕上是可见的,但是并不是在屏幕最前端的那个。比如当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态,它仍然可见,却失去了焦点,故不可与用户交互。
    stopped(停止状态):
    当Activity完全不可见时,此时Activity还在后台运行,仍然在内存中保留Activity的状态。
    killed(死亡状态):
    Activity被杀掉以后的状态。
  • Activity生命周期过程
    Activity创建启动:oncreate()–>onstart()–>onresume()
    点击Home,或者从A跳到B :onpause()–>onstop()
    再次回到Activity,或者从B返回A:onrestart()–>onstart–>onresume()
    退出Activity:onpause()–>onstop()–>ondestroy()

有了前面的知识积累后,我相信肯定能更好地分析上面说到的前三条面试题~

2、Activity任务栈:

任务栈采用“后进先出”的栈结构

3、Activity启动模式:

使用方式配置文件中添加launchMode属性,如singleTop:


standard(标准模式):
默认模式,每启动一次Activity,就会创建一个新的Activity实例并置于栈顶。谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。

singleTop(栈顶复用模式):
Activity处于栈顶时可以复用,就是以这种模式启动的Activity刚好位于任务栈栈顶,那么此Activity的实例就不会重建,而是重用栈顶的实例。并回调onNewIntent方法。

singleTask(栈内复用模式):
整个任务栈都可以复用,比singletop强多了;其次就是singletask下面的所有Activity将会销毁,然后也会回调onNewIntent方法;

singleInstance(单例模式):
栈内复用模式(singleTask)的加强版,启动该Activity时,直接创建一个新的任务栈,并创建该Activity实例放入新栈中,用得比较少。

4、Activity的Flags

Activity的Flags用于设定Activity的启动模式。可以在启动Activity时,通过Intent的addFlags()方法设置。
(1)FLAG_ACTIVITY_NEW_TASK
其效果与指定Activity为singleTask模式一致。
(2)FLAG_ACTIVITY_SINGLE_TOP
其效果与指定Activity为singleTop模式一致。
(3)FLAG_ACTIVITY_CLEAR_TOP
具有此标记位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。如果和singleTask模式一起出现,若被启动的Activity已经存在栈中,则清除其之上的Activity,并调用该Activity的onNewIntent方法。如果被启动的Activity采用standard模式,那么该Activity连同之上的所有Activity出栈,然后创建新的Activity实例并压入栈中。

5、scheme跳转协议:

  • Android中的scheme是一种页面内跳转协议,是一种非常好的实现机制。
  • 通过定义自己的scheme协议,可以非常方便跳转APP中的各个页面。
  • 通过scheme协议,服务器可以定制化告诉APP跳转哪个页面。
  • 可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。
    使用时在AndroidManifest中设置增加拦截器(intent-filter),设置scheme

            
                
                
                
                
                
            
        

总而言之,好记性不如烂笔头,站在岸上学不会游泳​。。。因此,实践是检验真理的唯一标准,继续搬砖吧​!

支持我的话可以关注下我的公众号,一起学习Android、小程序、跨平台开发~

image

你可能感兴趣的:(Android基础)