《android面试题和答案》由会员分享,可在线阅读,更多相关《android面试题和答案(10页珍藏版)》请在金锄头文库上搜索。
1、 什么是 Activity 通俗一点说 Activity 就是一个界面 这个界面里面可以放置各种控件 Activity 的界面也是 用 xml 文件表示的 放置在 res layout 下面 每生成一个新的 Activity 后 我们需要在 AndroidManifest xml 中注册一下这个 activity 请描述一下 Activity 生命周期 onCreate Bundle savedInstanceState 创建 activity 时调用 设置在该方法中 还以 Bundle 的形式提供对以前储存的任何状态的访问 onStart activity 变为在屏幕上对用户可见时调用 on
2、Resume activity 开始与用户交互时调用 无论是启动还是重新启动一个活动 该方法 总是被调用的 onPause activity 被暂停或收回 cpu 和其他资源时调用 该方法用于保存活动状态的 也 是保护现场 压栈吧 onStop activity 被停止并转为不可见阶段及后续的生命周期事件时调用 onRestart 重新启动 activity 时调用 该活动仍在栈中 而不是启动新的活动 onDestroy activity 被完全从系统内存中移除时调用 该方法被调用 两个 Activity 之间跳转时必然会执行的是哪几个方法 onCrante 在 Activity 生命周期开始
3、时调用 onRestoreInstanceState 用来恢复 UI 状态 onReStart 当 Activity 重新启动时调用 onStart Activity 对用户即将可见时调用 onResume 当 Activity 与用户交互时 绘制界面 onSaveInstanceState activity 即将移出栈顶保留 UI 状态时调用 onPause 暂停当前活动 activity 提交持久数据的改变 停止动画和其他占用 CPU 资源的 东西 由于下一个 activity 在这个方法返回之前不会 resume 所以这个方法的代码执行要快 onStop activity 不再可见时调用
4、 onDestroy 在 Activity 销毁钱被调用的最后一个方法 横竖屏切换时候 Activity 的生命周期 1 不设置 Activity 的 android configChanges 时 切屏会重新调用各个生命周期 切横屏时 会执行一次 切竖屏时会执行两次 2 设置 Activity 的 android configChanges orientation 时 切屏还是会重新调用各个生命 周期 切横 竖屏时只会执行一次 3 设置 Activity 的 android configChanges orientation keyboardHidden 时 切屏不会重 新调用各个生命周期
5、只会执行 onConfigurationChanged 方法 如何将一个 Activity 设置成窗口的样式 1 在你的 styles xml 文件中可以新建一如下的类似 Dialog 的 style 2 在 AndroidManifest xml 中在你需要显示为窗口的 activity 中添加如下属性 android theme style Theme FloatActivity 即可 也可以直接添加您对应需要展示为 Dialog style 的 Activity 的 android theme 属性值为 android theme android style Theme Dialog 你
6、后台的 Activity 被系统回收怎么办 系统会帮我们记录下回收前 Activity 的状态 再次调用被回收的 Activity 就要重新调用 onCreate 方法 不同于直接启动的是这回 onCreate 里是带上参数 savedInstanceState savedInstanceState是一个Bundle对象 你基本上可以把他理解为系统帮你维护的一个Map 对象 我们使用 savedInstanceState 可以恢复到回收前的状态 如何退出 Activity 如何安全退出已调用多个 Activity 的 Application 用 finish 方法退出 activity 在 2
7、 1 之前 可以使用 ActivityManager 的 restartPackage 方法 它可以直接结束整个应用 在使用时需要权限 android permission RESTART PACKAGES 在 2 2 这个方法失效了 可使用以下几个人工的方法 1 记录打开的 Activity 每打开一个 Activity 就记录下来 在需要退出时 关闭每一个 Activity 即可 2 发送特定广播 在需要结束应用时 发送一个特定的广播 每个 Activity 收到广播后 关闭即可 如果后台的 Activity 由于某原因被系统回收了 如何在被系统回收之前保存当前状态 被回收前调用 onSa
8、veInstanceState 方法保存当前状态 两个 Activity 之间怎么传递数据 在 Intent 的对象中增加要传递的参数既可 在 Intent 的对象的请求中加入键值对 对象名字 putExtra 键值对的名字 键值对的值 在另一个 Activity 中将 Intent 请求中的数据取出来 Intent intent getIntent String value intent getStringExtra testIntent 将 testIntent 对应的值赋值给 value 怎么在启动一个 Activity 时就启动一个 service 将启动 Service 的语句放在
9、onCreate 方法中 同一个程序 但不同的 Activity 是否可以放在不同的 Task 任务栈中 可以放在不同的 Task 中 需要为不同的 activity 设置不同的 taskaffinity 属性 启动 activity 的 Intent 需要包含 FLAG ACTIVITY NEW TASK 标记 Activity 怎么和 service 绑定 怎么在 activity 中启动自己对应的 service 1 Activity 能进行绑定得益于 Service 的接口 为了支持 Service 的绑定 实现 onBind 方法 2 Service 和 Activity 的连接可以
10、用 ServiceConnection 来实现 你需要实现一个新的 ServiceConnection 重写 onServiceConnected 和 onServiceDisconnected 方法 一旦连接 建立 你就能得到 Service 实例的引用 3 执行绑定 调用 bindService 方法 传入一个选择了要绑定的 Service 的 Intent 显式或 隐式 和一个你实现了的 ServiceConnection 实例 什么是 Service 以及描述下它的生命周期 Android Service 是运行在后台的代码 不能与用户交互 可以运行在自己的进程 也可以 运行在其他应用
11、程序进程的上下文里 需要通过某一个 Activity 或者其他 Context 对象来调 用 Context startService 和 Context bindService 如果在 Service 执行耗时的操作 需要启动一个新线程来执行 Android Service 只继承了 onCreate onStart onDestroy 三个方法 当我们第一次启动 Service 时 先后调用了 onCreate onStart 这两个方法 当停止 Service 时 则执行 onDestroy 方法 这里需要注意的是 如果 Service 已经启动了 当我们再次启 Service 时 不会
12、在执行 onCreate 方法 而是直接执行 onStart 方法 Service 有哪些启动方法 有什么区别 怎样停用 Service 两种启动 Service 的方式 Context startService 和 Context bindService 区别 为 Context startService Service 会经历 onCreate onStart 如果 Service 还没有运行 则android先调用onCreate 然后调用onStart 如果Service已经运行 则只调用onStart 所以一个 Service 的 onStart 方法可能会重复调用多次 stopSe
13、rvice 的时候直接 onDestroy 如果是调用者自己直接退出而没有调用 stopService 的话 Service 会一直在后 台运行 该 Service 的调用者再启动起来后可以通过 stopService 关闭 Service Context bindService Service 会经历 onCreate onBind onBind 将返回给客户端 一个 IBind 接口实例 IBind 允许客户端回调服务的方法 比如得到 Service 运行的状态或其 他操作 这个时候把调用者 Context 例如 Activity 会和 Service 绑定在一起 Context 退出了
14、Srevice 就会调用 onUnbind onDestroyed 相应退出 所谓绑定在一起就共存亡 了 停用 service 使用 context stopService 不用 service B 页面为音乐播放 从 A 跳转到 B 再返回 如何使音乐继续播放 a 使用 startActivityForResult 方法开启 b b 类结束时调用 finish a 类的 intent 有一个子 activity 结束事件 onActivityResult 在事件里继续播放音乐 什么是 IntentService 有何优点 IntentService 也是一个 Service 是 Servic
15、e 的子类 IntentService 和 Service 有所不同 通过 Looper 和 Thread 来解决标准 Service 中处理逻辑 的阻塞问题 优点 Acitivity 的进程 当处理 Intent 的时候 会产生一个对应的 Service Android 的进程处理器现在会尽可能的不 kill 掉你 非常容易使用 日历中 IntentService 的应用 什么时候使用 Service 比如播放多媒体的时候用户启动了其他 Activity 这个时候程序要在后台继续播放 比如检测 SD 卡上文件的变化 再或者在后台记 录你地理信息位置的改变等等 总之服务嘛 总是藏 在后头的 请
16、描述一下 Intent 和 Intent Filter Intent 在 Android 中被翻译为 意图 熟语来讲就是目的 他们是三种应用程序基本组件 activity service 和 broadcast receiver 之间互相激活的手段 在调用 Intent 名称时使用 ComponentName 也就是类的全名时为显示调用 这种方式一般用于应用程序的内部调用 因为你不一定会知道别人写的类的全名 我们来看看隐式 Intent 怎么用 首先我们先配置 我们的 Activity 的 Intent Filter 这样在调用的时候指定 Intent 的 action 系统就是自动的去对比是哪个 intent filter 符合我 们的 Activity 找到后就会启动 Activity 一个 intent filter 是 IntentFilter 类的实例 但是它一般不出现在代码中 而是出现在 android Manifest 文件中 以的形式 有一个例外是 broadcast receiver 的 intent filter 是使用 Context registerReceiv