Android面试题之Activity

来源:互联网 发布:mac 调整鼠标指针大小 编辑:程序博客网 时间:2024/06/05 19:49
1.什么是Activity?
四大组件之一,一般的,一个用户交互界面对用一个activity,activity是Context的子类,同时实现了
window.callback和keyevent.callback,可以处理与窗体用户交互的事件。
常用的有FragmentActivity,ListActivity等,抽取BaseActivity
2.Activity的生命周期
onPostResume()和onPostCreate()当Activity创建完成之后
3.两个Activity之间跳转必然会执行的是哪几个方法
A:onPause()
B:           onCreate(),onStart(),onResume()这时如果B覆盖了窗体A会调用onStop()方法,如果B是个透明的
,即A没有被完全覆盖的情况下,A不会执行onStop()方法
4.如何保存Activity的状态?
一般来说,调用onPause()和onStop()方法后的Activity实例仍然存在于内存中,Activity的所有信息和状态数据
不会消失,当Activity重新回到前台后,所有的改变都会得到保留。
但是当系统内存不足时,调用onPause()和onStop()方法后的Activity可能会被系统摧毁,此时内存中就不会存
有该Activity的实例对象了。如果之后这个Activity重新回到前台,之前所做的改变就会消失,为避免此种情况
的发生,我们可以复写onSaveIntanceState()方法。onSaveInatanceState()方法接受一个Bundle类型的参数,开

发者可以将状态数据存储到这个Bundle对象中。如果滴啊用onSaveInstanceState()方法,调用将发生在onPause()

或onStop()方法之前。

5.横竖屏切换时Activity的生命周期
此时的生命周期跟清单文件里的配置有关系
(1)不设置Activity的android:configChanges时,且平时重新调用各个生命周期默认首先销毁当前Activity,
然后重新加载。
(2)设置Activity android:configChanges="orientation|keyboardHidden|screenSize"时,切屏时不会重新调
用各个生命周期,只会执行onConfigurationChanged方法
6.将Activity设置成窗口的样式。
android:theme="@android:style/Theme.Dialog"
7.如何退出Activity?如何安全退出已调用多个Activity的Application?
(1)通常情况用户退出一个Activity只需按返回键,我们写代码想退出Activity直接调用finish方法
(2)记录打开的Activity:
每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可
(3)发送特定广播
在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。
(4)递归退出
再打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。
(5)其实,也可以通过intent的flag来实现intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)激活一个新的
Activity,此时如果该任务栈中已有该Activity,那么系统会把这个Activity上面的所有Activity都干掉。即相
当于设置Activity的启动模式为singleTop。

8.Activity的四种启动模式?

同一个程序,但不同的Activity是可以放在不同的任务栈中的,intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

四种启动模式详解

9.Android中的Context,Activity,Application有什么区别?
相同:Activity和Application都是Context的子类
不同:维护的生命周期不同。Context维护的是当前的Activity的生命周期,Application维护的是整个项目的生
命周期。
使用context的时候,小心内存泄露,防止内存泄露,注意一下几个方面:
(1)不要让生命周期长的对象引用Activity Context,既保证引用Activity的对象要与Activity本身的生命周期
是一样的。
(2)对于生命周期长的对象,可以使用Application Context
(3)避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部类对象引用导致生命周期变化。

10.两个Activity之间传递数据,除了intent,广播接收者,ContentProvider还有什么?(Intent在传递数据时,可以是实现了Seralizable和Parcelable的对象,Parcelable序列化在内存中,Seraliable序列化在文件中,它是JavaSE中接口)

(1)利用static静态数据,public static成员变量
(2)利用外部存储的传输
例如 File 文件存储
SharePreference首选项
Sqlite数据库

11.Context是什么?
(1)它描述的是一个应用程序环境的信息,即上下文
(2)该类是一个抽象类,Android提供了该抽象类的具体实现类
(3)通过它我们可以获取应用程序的资源和类,也包括一些应用级别的操作:例如启动一个Activity,发送广播,

接收Intent,信息等。

0 0
原创粉丝点击