客户端基础知识必备笔记(二) | 青训营笔记

119 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第10天

Android基础组件

界面组件

Activity & Fragment

Fragment

基本用法

  • What:

    • 一个轻量级的“子Activity”;
    • 用来表示Activity中的行为或用户界面的部分;
    • 一个具有自己生命周期的控件;
    • 依赖于Activity存活,并可以被多个Activity复用。
  • Why:

    • 模块化(Modularity):将Activity中的多个子界面分散到不同的Fragment中完成。
    • 可重用(Reusability):多个Activity可复用同一个Fragment。
    • 可适配(Adaptability):根据屏幕尺寸、方向展示不同的布局。

    Android-Basics-Fragment-Why.png

  • How:创建布局文件 -> Fragment中绑定布局 -> Activity中加载Fragment

生命周期

  • 介绍:

    • onAttach():Fragment和Activity建立关联时调用。
    • onCreateView():当Fragment创建视图时调用。
    • onActivityCreated():Activity的onCreate()方法已返回时调用。
    • onDestroyView():当Fragment中的视图被移除时调用。
    • onDetach():Fragment和Activity取消关联时调用。
  • 场景:

    • 启动退出:

      • 启动:onAttach() -> onCreate() -> onCreateView() -> onActivityCreated() -> onStart() -> onResume() -> Resumed
      • 退出:Resumed -> onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()
    • 部分遮挡:

      • 遮挡:Resumed -> onPause() -> Paused
      • 恢复:Paused -> onResume() -> Resumed
    • 完全遮挡:

      • 遮挡:Resumed -> onPause() -> onStop() -> onDestroyView()
      • 恢复:onCreateView() -> onActivityCreated() -> onStart() -> onResume() -> Resumed

使用FragmentTransaction.setMaxLifecycle()可控制Fragment的最大生命周期

与Activity交互

  • 组件获取:

    • Fragment获取Activity组件:getActivity().findViewById(R.id.xxx)
    • Activity获取Fragment组件:getSupportFragmentManager().findFragmentById(R.id.fragment_xxx)
  • 数据传递:

    • Fragment传数据给Activity:

      • 通过对象调用(方法/接口)
      • 通过ViewModel/Handler/Broadcast/EventBus等通信
    • Activity传数据给Fragment:

      • setArguments(Bundle bundle)

服务组件

Service

基本用法

  • What:可以在后台执行长时间运行操作,而不提供用户界面的应用组件。

  • Why:确保应用程序可以在后台保持运行,以便用户可以同时操作多个应用程序。

  • How:

    1. 注册:AndroidManifest中使用<service />标签。
    2. 创建:建立相应的Service类。
    3. 加载:startService() / bindService()

生命周期

  • onStart()
  • onBind()
  • onCreate()
  • onDestroy()

与Activity通信

  1. 通过Binder类的getService()方法返回Service对象。
  2. 通过Service类的onBind()方法返回Binder对象。
  3. 通过ServiceConnection对象实现的onServiceConnected()方法获取Service实例。
  4. 通过Activity的bindService()方法绑定服务。
  5. 通过Activity的Service实例直接通信。