安卓AI每日一题

53 阅读6分钟

1、Activity的生命周期

请解释Android中的Activity的生命周期,并说明onStart()与onResume()、onPause()与onStop()的核心区别。

  1. onCreate():Activity首次创建时调用、初始化布局(setContentView),会执行绑定控件等操作
  2. onStart():Actitity可见但未获得焦点(用户无法交互),如被对话框遮挡等情况
  3. onResume():Actitity可见并且获得焦点时,即用户可交互状态
  4. onPause():Actitity可见但失去焦点(弹出系统对话框,启动新activity未完全覆盖)
  5. onStop():Activity不可见并且失去焦点时调用
  6. onDestory():Activity销毁时调用

onStart()与onResume()区别:两者调用时都可见,后者可交互,前者不可交互 onPause()与onStop()区别:前者部分可见,后者完全不可见

2、Fragment的生命周期

请解释Android中的Fragment的生命周期

  1. onAttach():Fragment与Activity绑定成功时调用,可通过getActivity()获取宿主Activity
  2. onCreate():Fragment初始化时调用这个方法,用于初始化非视图相关数据(如加载数据,初始化变量),不涉及布局
  3. onCreateView():创建Fragment视图时调用,返回加载后的布局View
  4. onViewCreated():Fragment布局创建完成后调用
  5. onStart():Fragment可见,跟随Activity的onStart()
  6. onResume():Fragment可见及可交互,跟随Activity的onResume()
  7. onPause():Fragment失去焦点,跟随Activity的onPause()
  8. onStop():Fragment完全不可见,跟随Activity的onStop()
  9. onDestroyView():Fragment视图销毁时调用,释放非视图资源(解绑控件,停止动画)
  10. onDestroy():Fragment本身销毁时调用,释放非视图资源(关闭数据库,解绑广播)
  11. onDetach():Fragment与Activity解绑时调用,之后无法通过getActivity()获取宿主activity

Fragment生命周期方法会跟随宿主activity对应方法触发,(start\onResume\onPause\onStop)

3、Activity 的四种启动模式

请简述 Android 中 Activity 的四种启动模式(launchMode)及其核心应用场景,并用一句话说明每种模式下 Activity 实例的创建与复用规则。

  1. standard(标准模式)
  • 应用场景:大多数默认场景(如普通页面跳转)。
  • 实例规则:每次启动都创建新实例,入栈顶,无复用。
  1. singleTop(栈顶复用模式)
  • 应用场景:接收通知打开的页面、列表页刷新(避免栈顶重复)。
  • 实例规则:栈顶为该Activity时复用,触发 onNewIntent() ,否则创建新实例。
  1. singleTask(栈内单例模式)
  • 应用场景:应用主页、购物车页面(全局唯一,避免多实例)。
  • 实例规则:栈内存在该Activity时,销毁其上方所有实例并复用,否则创建新实例入栈。
  1. 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 四大组件的名称及核心作用,说明它们各自的生命周期关键方法

  1. Activity(活动)
  • 核心作用:负责用户界面的展示与交互,一个 Activity 通常对应一个页面。

  • 生命周期关键方法

    • onCreate():Activity 被创建时调用,用于初始化界面和数据。
    • onStart():Activity 即将对用户可见时调用。
    • onResume():Activity 获得用户焦点,可与用户交互时调用。
    • onPause():Activity 失去用户焦点,通常因另一个 Activity 启动或弹出对话框。
    • onStop():Activity 完全不可见时调用。
    • onDestroy():Activity 被销毁前调用,用于释放资源。
  1. Service(服务)
  • 核心作用:在后台执行长时间运行的操作,不提供用户界面。

  • 生命周期关键方法

    • onCreate():Service 被创建时调用,用于初始化。
    • onStartCommand():每次通过 startService() 启动 Service 时调用,用于处理启动请求。
    • onBind():当另一个组件通过 bindService() 与 Service 绑定时调用,返回一个 IBinder 对象供客户端与 Service 通信。
    • onDestroy():Service 被销毁前调用,用于清理资源。
  • 注意:默认运行在主线程,耗时任务需手动开子线程或使用 IntentService/JobScheduler

  1. BroadcastReceiver(广播接收器)
  • 核心作用:用于接收系统或应用发出的广播消息,如电量低、网络变化等。

  • 生命周期关键方法

    • onReceive():接收到广播时调用,是 BroadcastReceiver 的核心方法,用于处理广播事件,必须在 10 秒内完成。
  • 注册方式

    • 静态注册AndroidManifest.xml):常驻,即使应用未运行也能接收
    • 动态注册registerReceiver()):仅在代码运行时有效,需手动注销
  1. ContentProvider(内容提供器)
  • 核心作用:管理应用的数据,并允许其他应用访问这些数据,实现跨应用数据共享。

  • 生命周期关键方法

    • onCreate():ContentProvider 被创建时调用,用于初始化提供者。
    • query():处理查询数据的请求,返回 Cursor 对象。
    • insert():处理插入新数据的请求,返回新数据的 URI。
    • update():处理更新已有数据的请求,返回更新的行数。
    • delete():处理删除数据的请求,返回删除的行数。
    • getType():返回指定 URI 对应的 MIME 类型。

补充说明:

  • 线程限制:除 Service 外,其他组件默认运行在主线程(UI线程),耗时操作需手动开子线程。
  • 进程优先级:系统会根据组件运行状态调整进程优先级(如前台 Activity > 前台 Service > 后台 Service)。
  • Android 8.0+ 限制:后台 Service 和隐式广播受到限制(推荐使用 JobSchedulerWorkManager 替代)。