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

130 阅读4分钟

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

主要为思维导图大纲,收集课堂要点和一些补充知识
欢迎补充&指正

客户端基础知识必备

1.基础组件

1.1界面组件(Activity&Fragment)

  • Activity

    • what:界面容器

    • why

      • 前台交互
      • 程序入口
      • 布局容器
    • 生命周期

      • onCreate()创建视图/绑定数据
      • onStart()已启动,即将进入前台
      • onResume()开始与用户交互,位于Activity栈顶
      • onPause()Activity失去焦点或者已经暂停,界面部分可见 下一个生命周期为onStop()或者onResume()
      • onStop()Activity不可见,下一个回调是onRestart()或者onDestroy()
      • onRestart()重启,下一个回调是onStart()
      • onDestroy()销毁Activity并释放其资源
      • onSaveInstanceState()非正常关闭时回调,用于保存数据
      • onRestoreInstanceState()/onCreate()用于恢复数据
    • 配置改变场景

      • 1.销毁

        • Resume-onSaveInstanceState()-onPause()-onStop()-onDestroy()
      • 2.重建

        • onCreate()-onStart()-onRestoreInstanceState()-onResume()
      • 配置改变

        • AndoridManifest配置节点的configChange属性 local:语言 fontScale字体大小 orientation旋转屏幕 keyboardHidden
        • onConfiurationChanged()
    • 启动模式

      • standard(默认:允许重复)

      • singletop(不允许连续重复)栈顶复用

      • singletask(不允许同一个栈重复)栈内复用

        • 多个首页
      • singleinstance(不允许整个系统内重复)全局复用

  • Fragment

    • why

      • 界面组件分离
      • 速度快
      • 解决碎片化问题
    • how

      • 1.创建fragment布局文件

      • 2.创建fragment子类,加载布局文件

      • 3.activity加载fragm

        • 3.1静态加载:布局中绑定
        • 3.2动态:FragmentManager加载
    • 生命周期

      • onAttrach() activity和fragment建立关联时调用
      • onCreateView()创建视图
      • onActivityCreated() activity的onCreate()方法时返回调用
      • onDestroyView()
      • onDectach()取消关联时调用
    • 与activity交互

      • 组件获取

        • getActivity()
        • FragmentManager.findFragmentByld()
      • 数据传递

        • setArgument()

        • 方法调用

        • 异步方式

          • viewmodel
          • handler
          • broadcast

1.2服务组件(Service)

  • 基本用法

    • 1.注册:AndoridManifest中使用<srevice.../>标签
    • 2.创建:建立相应Service实现类
    • 3.加载:startService()/bindService()
  • 生命周期

    • onStart()
    • onBind()
    • onCreate()
    • onDestroy()
  • Service与Activity通信

    • 1.定义Binder子类,并实现getService()方法,返回Service对象
    • 2.实现Service类的onBind()方法,返回上述Binder对象
    • 3.实例化ServiceConnection对象,实现onServiceConnected()方法
    • 4.Activity中调用bindService()方法,传递步骤3的ServiceConnection对象,将流程跑起来
    • 5.Activity可以通过调用Service实例中的方法进行直接通信

1.3广播组件(Broadcast)

  • 基本用法

    • 静态广播

      • 1.注册:AndoridManifest中使用<receive.../><intent-filter.../>
      • 2.创建:建立相应地BroadcastReceive实现类
      • 3.接收:在步骤二的onReceive()中接收广播
      • 4.发送:Context.sendBroadcast()
    • 动态广播

      • 注册:Context.registerReceive()
  • 常用系统广播

    • Intent.ACTION_CONNECTIVITY_CHANGE
    • Intent.ACTION_BATTERY_CHANGED
    • Intent.ACTION_SCREEN_ON
    • Intent.ACTION_SCREEN_OFF
    • Intent.ACTION_PACKAGE_INSTALL
    • Intent.ACTION_BOOT_COMPLETED
    • Intent.ACTION_PAKAGE_REPLACED
    • Intent.ACTION_PAKAGE_REMOVED

1.4数据组件(ContentProvider&ContentResolver)

  • 基本用法

    • 生产者

      • 1.注册:AndoridManifest中使用<provider.../>

        • 属性:authorities/exported/readPermission/writePermission
      • 2.创建:建立相对应的ContentProvider实现类

        • 方法:onCreate/getType/insert/delete/update/query
    • 消费者

      • 1.声明:AndoridManifest中声明权限

      • 2.使用:context.getContentResolver()

        • 方法:insert/delete/update/query

1.5Intent

  • 意图

    • 1.Context.startActivity(Intent)
    • 2.Context.startService(Intent)
    • 3.Context.sendBroadcast(Intent)
  • 基本用法

    • 1.显式Intent

      • setComponent/setClass指定具体类
    • 2.隐式

      • Action/Data/Category/Type/Component(组件)/Extra/Flag
  • 系统能力

    • 电话(Intent.ACTION_DIAL,Uri.parse("tel:10010"))
    • 短信(Intent.ACTION_SENDTO,Uri.parse("smsto:10010"))
    • ...
  • 使用:startActivity(Intent)

2.通信组件

2.1Handler

  • 基本用法

    • 1.创建:新建Handler,实现handlerMessage(Message)
    • 2.构造:Message:what、setData()
    • 3.发送:子线程调用Handler.sendMessage(Message)发送Message
    • 4.处理:在Handler的handlerMessage(Message msg)主线程更新UI

2.2Binder

  • 数据copy1次

  • 原因:Linux进程隔离

  • 基本用法

    • 服务端

      • 1.定义1个AIDL文件
      • 2.实现描述的接口,编写service
      • 3.(jar包形式)提供实体类
    • 客户端

      • 1.拿到AIDL文件
      • 2.绑定服务,获得接口持有对象
  • 核心原理

回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口

1.声明在程序清单AndoridManifest.xml

2.类文件写在MainActivity,默认入口:ui.MainActivity(注册) 3.布局文件:activity.main.xml LinearLayout、Gridview(列表)包装(布局) 4.savedInstanceState(绑定)

接电话被crash

原因:页面被回收导致本地变量被置空

  • 1.判空
  • 2.页面回收生命周期存储数据,重建时恢复

静态与动态广播的区别

生存期:静态广播的生存期可以比动态广播的长很多,而动态广播会随着context的终止而终止

优先级:动态广播的优先级比静态广播高

动态广播无需在AndroidManifest.xml中声明即可直接使用;而静态广播则需要,有时候还要在AndroidManifest.xml中加上一些权限的声明

广播自启动