Android面试知识点整理:Activity、Service与BroadcastReceiver

需积分: 9 0 下载量 141 浏览量 更新于2024-11-04 收藏 4.7MB ZIP 举报
资源摘要信息:"在Android开发中,Activity和Service是两个非常重要的组件。Activity是Android应用中的一种重要组件,它负责展示用户界面,并且可以处理用户交互。Service是一种可以在后台执行长时间运行操作而不提供用户界面的应用组件。在面试或者日常的Android开发中,我们经常会遇到关于Activity和Service的问题。以下是我整理的一些面试题和基础知识。 1. Android Activity Activity任务栈是什么? Activity任务栈是一种用来管理Activity实例的结构,它遵循后进先出(LIFO)的原则。当一个新的Activity启动时,它会被放入栈顶。当用户按返回键时,栈顶的Activity会被弹出并关闭。这可以保证用户的导航历史和任务的连续性。 Activity有哪些常用的标记位Flags? Activity的常用标记位Flags包括: - FLAG_ACTIVITY_NEW_TASK:创建一个新任务,并将Activity放入其中。 - FLAG_ACTIVITY_SINGLE_TOP:如果栈顶已经存在该Activity的实例,则不会创建新的实例,而是调用现有实例的onNewIntent()方法。 - FLAG_ACTIVITY_CLEAR_TOP:如果当前Activity已经存在,则清除其上面的所有Activity,并将其重新调用到栈顶。 - FLAG_ACTIVITY_CLEAR_TASK:清除当前任务栈中所有Activity,然后启动指定Activity。 - FLAG_ACTIVITY_NO_ANIMATION:启动Activity时不显示启动和结束动画。 Activity的数据是怎么保存的,进程被Kill后,保存的数据怎么恢复的? Activity的数据可以通过onSaveInstanceState()方法保存。当Activity被意外销毁时,如系统内存不足,onSaveInstanceState()会被调用,我们可以在这个方法中保存需要的数据。当Activity重新创建时,可以通过onCreate()或onRestoreInstanceState()方法中的Bundle对象恢复数据。 2. Android Service service 的生命周期,两种启动方式的区别。 Service的生命周期包括:onCreate()、onStartCommand()、onBind()和onDestroy()。onCreate()在Service第一次创建时调用,onStartCommand()在每次Service启动时调用,onBind()在Service绑定时调用,onDestroy()在Service销毁时调用。 Service有两种启动方式:startService和bindService。startService启动的方式是通过调用startService()方法启动Service,Service运行在启动它的组件的进程和线程中,是一个独立的单元。bindService启动的方式是通过调用bindService()方法启动Service,Service运行在启动它的组件的进程和线程中,但它与启动它的组件存在绑定关系。 Service启动流程。 Service的启动流程是从调用startService()方法开始的,该方法会调用Service的onStartCommand()方法。如果Service尚未创建,系统会先调用onCreate()方法创建Service。如果Service已经创建,系统会直接调用onStartCommand()方法。 Service与Activity怎么实现通信? Service与Activity可以通过绑定Service实现通信。具体实现方式是通过调用bindService()方法,该方法会绑定Service,并返回一个IBinder对象,Activity可以通过这个对象与Service进行通信。 IntentService是什么,IntentService原理,应用场景及其与Service的区别? IntentService是一种继承自Service的抽象类,它适用于执行不需要交互的后台任务。IntentService会在一个新的工作线程上处理所有的Intent请求,处理完毕后,它会自动停止,不需要我们手动停止Service。IntentService适用于执行短时间的任务,如网络请求或数据处理。与Service的主要区别在于IntentService内部管理线程,而Service则不管理。 Service 的 onStartCommand 方法有几种返回值?各代表什么意思? onStartCommand()方法有四种返回值:START_NOT_STICKY、START_STICKY、START_REDELIVER_INTENT和START.cleanedUp。START_NOT_STICKY表示如果Service被系统杀死,系统不会重新创建Service。START_STICKY表示如果Service被系统杀死,系统会尽量保持Service运行,重新创建Service并调用onStartCommand(),但是不传递之前的Intent。START_REDELIVER_INTENT表示如果Service被系统杀死,系统会重新创建Service并传递最后一个Intent。START.cleanedUp表示如果Service被系统杀死,系统会重新创建Service并传递最后一个Intent,但是调用onStartCommand()后,系统会调用ondestroy()销毁Service。 bindService和startService混合使用的生命周期以及怎么关闭? 当bindService和startService混合使用时,只有当所有的客户端都断开连接后,Service才会被销毁。关闭Service的方式是调用unbindService()方法和stopService()方法。调用unbindService()方法会关闭Service与Activity的连接,但Service仍然可以运行。调用stopService()方法会停止Service的运行。"