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

前言

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

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

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

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

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

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

目录

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

1、Activity生命周期:

关于Activity的生命周期,离不开经典的流程图
activity生命周期.png

  • 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:

<activity android:name=".MainActivity"
            android:launchMode="singleTop"></activity>

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
<activity android:name=".Main2Activity" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <!--跳转协议data中设置scheme等-->
                <data android:scheme="xxx" />
            </intent-filter>
        </activity>

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

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

image

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值