1、Activity的生命周期
请解释Android中的Activity的生命周期,并说明onStart()与onResume()、onPause()与onStop()的核心区别。
- onCreate():Activity首次创建时调用、初始化布局(setContentView),会执行绑定控件等操作
- onStart():Actitity可见但未获得焦点(用户无法交互),如被对话框遮挡等情况
- onResume():Actitity可见并且获得焦点时,即用户可交互状态
- onPause():Actitity可见但失去焦点(弹出系统对话框,启动新activity未完全覆盖)
- onStop():Activity不可见并且失去焦点时调用
- onDestory():Activity销毁时调用
onStart()与onResume()区别:两者调用时都可见,后者可交互,前者不可交互 onPause()与onStop()区别:前者部分可见,后者完全不可见
2、Fragment的生命周期
请解释Android中的Fragment的生命周期
- onAttach():Fragment与Activity绑定成功时调用,可通过getActivity()获取宿主Activity
- onCreate():Fragment初始化时调用这个方法,用于初始化非视图相关数据(如加载数据,初始化变量),不涉及布局
- onCreateView():创建Fragment视图时调用,返回加载后的布局View
- onViewCreated():Fragment布局创建完成后调用
- onStart():Fragment可见,跟随Activity的onStart()
- onResume():Fragment可见及可交互,跟随Activity的onResume()
- onPause():Fragment失去焦点,跟随Activity的onPause()
- onStop():Fragment完全不可见,跟随Activity的onStop()
- onDestroyView():Fragment视图销毁时调用,释放非视图资源(解绑控件,停止动画)
- onDestroy():Fragment本身销毁时调用,释放非视图资源(关闭数据库,解绑广播)
- onDetach():Fragment与Activity解绑时调用,之后无法通过getActivity()获取宿主activity
Fragment生命周期方法会跟随宿主activity对应方法触发,(start\onResume\onPause\onStop)
3、Activity 的四种启动模式
请简述 Android 中 Activity 的四种启动模式(launchMode)及其核心应用场景,并用一句话说明每种模式下 Activity 实例的创建与复用规则。
- standard(标准模式)
- 应用场景:大多数默认场景(如普通页面跳转)。
- 实例规则:每次启动都创建新实例,入栈顶,无复用。
- singleTop(栈顶复用模式)
- 应用场景:接收通知打开的页面、列表页刷新(避免栈顶重复)。
- 实例规则:栈顶为该Activity时复用,触发 onNewIntent() ,否则创建新实例。
- singleTask(栈内单例模式)
- 应用场景:应用主页、购物车页面(全局唯一,避免多实例)。
- 实例规则:栈内存在该Activity时,销毁其上方所有实例并复用,否则创建新实例入栈。
- singleInstance(全局单例模式)
- 应用场景:系统级页面(如电话、地图详情页)、跨应用共享页面。
- 实例规则:单独占用一个任务栈,全局唯一,每次启动复用。
4、Intent 的作用
请说明 Android 中 Intent 的作用,并区分显式 Intent 和隐式 Intent 的定义、使用场景及核心区别(需举例说明两种 Intent 的基本使用代码格式)。
Intent 的核心作用:Intent 是 Android 中的“意图”组件,核心作用是 组件间通信的桥梁,用于在 Activity、Service、BroadcastReceiver 等组件之间传递数据、发起操作请求(如启动组件、发送广播),还能指定组件的启动模式、数据类型等配置。
显式 Intent 与隐式 Intent 的区别
| 维度 | 显式 | 隐式 |
|---|---|---|
| 定义 | 明确指定目标组件的全类名(包名+类名),直接指向目标组件 | 不指定具体组件,通过“动作(Action)、类别(Category)、数据(Data)”等条件匹配系统中符合要求的组件 |
| 使用场景 | 应用内部组件跳转(如 App 内 Activity 切换) | 跨应用组件调用(如打开浏览器、拨打电话)或应用内松耦合组件通信 |
| 核心特点 | 目标明确、效率高,依赖组件类名(耦合度高) | 目标灵活、耦合度低,需系统匹配组件(可能无匹配组件导致崩溃) |
- 显式 Intent(启动应用内 SecondActivity):
// 上下文(当前 Activity) + 目标组件类
Intent explicitIntent = new Intent(MainActivity.this, SecondActivity.class);
// 可选:传递数据
explicitIntent.putExtra("key", "显式 Intent 传递的数据");
// 启动 Activity
startActivity(explicitIntent);
- 隐式 Intent(打开系统浏览器访问网页):
// 指定动作(ACTION_VIEW 表示“查看”动作)
Intent implicitIntent = new Intent(Intent.ACTION_VIEW);
// 设置数据(网页 URL,需符合 Data 格式要求)
implicitIntent.setData(Uri.parse("https://www.baidu.com"));
// 可选:添加类别(默认类别可省略)
implicitIntent.addCategory(Intent.CATEGORY_DEFAULT);
// 启动组件(系统会匹配支持 ACTION_VIEW + 网页 Data 的组件,如浏览器)
startActivity(implicitIntent);
5、Android中的四大组件
简述 Android 四大组件的名称及核心作用,说明它们各自的生命周期关键方法
- Activity(活动)
-
核心作用:负责用户界面的展示与交互,一个 Activity 通常对应一个页面。
-
生命周期关键方法:
onCreate():Activity 被创建时调用,用于初始化界面和数据。onStart():Activity 即将对用户可见时调用。onResume():Activity 获得用户焦点,可与用户交互时调用。onPause():Activity 失去用户焦点,通常因另一个 Activity 启动或弹出对话框。onStop():Activity 完全不可见时调用。onDestroy():Activity 被销毁前调用,用于释放资源。
- Service(服务)
-
核心作用:在后台执行长时间运行的操作,不提供用户界面。
-
生命周期关键方法:
onCreate():Service 被创建时调用,用于初始化。onStartCommand():每次通过startService()启动 Service 时调用,用于处理启动请求。onBind():当另一个组件通过bindService()与 Service 绑定时调用,返回一个 IBinder 对象供客户端与 Service 通信。onDestroy():Service 被销毁前调用,用于清理资源。
-
注意:默认运行在主线程,耗时任务需手动开子线程或使用
IntentService/JobScheduler
- BroadcastReceiver(广播接收器)
-
核心作用:用于接收系统或应用发出的广播消息,如电量低、网络变化等。
-
生命周期关键方法:
onReceive():接收到广播时调用,是 BroadcastReceiver 的核心方法,用于处理广播事件,必须在 10 秒内完成。
-
注册方式:
- 静态注册(
AndroidManifest.xml):常驻,即使应用未运行也能接收 - 动态注册(
registerReceiver()):仅在代码运行时有效,需手动注销
- 静态注册(
- ContentProvider(内容提供器)
-
核心作用:管理应用的数据,并允许其他应用访问这些数据,实现跨应用数据共享。
-
生命周期关键方法:
onCreate():ContentProvider 被创建时调用,用于初始化提供者。query():处理查询数据的请求,返回 Cursor 对象。insert():处理插入新数据的请求,返回新数据的 URI。update():处理更新已有数据的请求,返回更新的行数。delete():处理删除数据的请求,返回删除的行数。getType():返回指定 URI 对应的 MIME 类型。
补充说明:
- 线程限制:除
Service外,其他组件默认运行在主线程(UI线程),耗时操作需手动开子线程。 - 进程优先级:系统会根据组件运行状态调整进程优先级(如前台 Activity > 前台 Service > 后台 Service)。
- Android 8.0+ 限制:后台 Service 和隐式广播受到限制(推荐使用
JobScheduler或WorkManager替代)。