如何退出一个Activity,如何安全退出已调用多个Activity 的 Application?
这道题想考察什么
Activity管理不善,很容易导致内存泄漏,如果要确保不会泄露,开启了多个Activity的应用,如何关闭才万无一失。
细分下来的知识点
彻底退出app的方式有很多种,尽可能说出自己熟知的那些。
如何作答
1、通常情况用户退出一个 Activity 只需按返回键,我们写代码想退出 activity直接调用 finish()方法就行。
2、记录打开的 Activity:每打开一个 Activity,就记录下来。在需要退出时,关闭每一个 Activity 即可。
3、发送特定广播:在需要结束应用时,发送一个特定的广播,每个 Activity 收到广播后,关闭即可。
registerReceiver(receiver, filter)//给某个 activity 注册接受接受广播的意图//如果过接受到的是 关闭 activity 的广播 就调用 finish()方法 把当前的activity finish()掉。
4、递归退出
在打开新的 Activity 时使用 startActivityForResult,然后自己加标志,在onActivityResult 中处理,递归关闭。
5、其实 也可以通过 intent 的 flag 来实现
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)激活一个新的 activity。此时如果该任务栈中已经有该 Activity,那么系统会把这个 Activity 上面的所有Activity 干掉。其实相当于给 Activity 配置的启动模式为 SingleTop。
Activity的4种启动模式,在什么情况下使用何种模式
这道题想考察什么
启动模式是谷歌提供的,让开发者灵活控制Activity栈的方式,在特定的场景下使用有奇效。
细分下来的知识点
- 是哪4种,有什么区别
- 什么场景下,用哪种刚好合适
如何作答
-
singleTop 跟 standard 模式比较类似。唯一的区别就是,当跳转的对象是位于栈顶的 activity(应该可以理解为用户眼前所 看到的 activity)时,程序将不会生成一个新的 activity 实例,而是直接跳到现存于栈顶的那个 activity 实例。拿上面的例子来说,当 Act1 为 singleTop 模式时,执行跳转后栈里面依旧只有一个实例,如果现在按返回键程序将直接退出。
-
singleTask 模式和 singleInstance 模式都是只创建一个实例的。在这种模式下,无论跳转的对象是不是位于栈顶的 activity,程序都不会生成一个新的实例(当然前提是栈里面已经有这个实例)。这种模式相当有用,在以后的多 activity开发中,常会因为跳转的关系导致同个页面生成多个实例,这个在用户体验上始终有点不好,而如果你将对应的 activity 声明为 singleTask 模式,这种问题将不复存在。在主页的 Activity 很常用。
Android 中的 Context, Activity,Appliction 有什么区别?
这道题想考察什么
启动模式是谷歌提供的,让开发者灵活控制Activity栈的方式,在特定的场景下使用有奇效。
细分下来的知识点
- 是哪4种,有什么区别
- 什么场景下,用哪种刚好合适
如何作答
相同:Activity 和 Application 都是 Context 的子类。 Context 从字面上理解就是上下文的意思,在实际应用中它也确实是起到了管理 上下文环境中各个参数和变量的总用,方便我们可以简单的访问到各种资源。 不同:维护的生命周期不同。 Context 维护的是当前的 Activity 的生命周期, Application 维护的是整个项目的生命周期。 使用 context 的时候,小心内存泄露,防止内存泄露,注意一下几个方面: 1. 不要让生命周期长的对象引用 activity context,即保证引用 activity 的对象 要与 activity 本身生命周期是一样的。 2. 对于生命周期长的对象,可以使用 application,context。 3. 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对 外部对象引用导致的生命周期变化。