第二期:Android基础知识详解|青训营笔记

312 阅读5分钟

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

1、Android基础控件

1.1界面组件(Activity&Fragment)

1.1.1Activity(生命周期)

  • WHAT:界面容器,简单理解每一张页面就是一个实体。
  • WHAT:作用:前台交互+程序入口+布局容器

QQ图片20220726180408.jpg

  1. onCreate():创建时回调,一般在此处创建视图和绑定数据。
  2. onStart():已启动,即将进入前台
  3. OnResume():与用户开始交互,位于Activity栈顶
  4. onPause():Actvity失去焦点或已暂停,Activity界面部分可见,下一个生命周期是onResume()或onStop()
  5. onStop():Activity不再可见,下一个回调是onRestart()或onDestory()
  6. onRestart():重启已停止的Activity,下一个回调是onStart()
  7. onDestory():销毁Actvity,释放该Activity的所有资源
  8. onSaveInstanceState():在非正常关闭时回调,用于保存数据,不支持持久化数据
  9. onRestoreInstaceState()/onCreate():用于恢复数据
  • 常用场景举例

image.png

  • 打开页面:1-2-3
  • 关闭页面:4-5-6
  • 注意:Android4.0在onPause()处结束,Android5.0在onStop()处结束。

image.png

  • 1部分遮挡:当我们浏览某一个页面时,如果出现授权提示框,就会出现部分遮挡,这时将调用onPause(),进入Paused状态。
  • 2遮挡恢复:之后再进入Resumed状态,恢复正常。

image.png

  • 1页面全遮挡:这时将会调用onStop()方法进入Stopped状态。

  • 234遮挡恢复:之后调用onRestart()函数和onStart()函数进入Started状态,再次进入页面可见状态,之后调用onResume()函数进入Resumed状态。

  • 配置改变场景:如浏览图片时,突然旋转屏幕,改变显示方式。(1)销毁:Resumed-onSaveInstaceState()-onPause()-onStop()-onDestory()(2)重建:onCreate()-onStart()-onRestoreInstanceState()-onResume()。

  • 配置改变不重建Activity:AndroidManifest中配置Activity节点的configChange属性;

  • 配置改变:onConfigurationChanged()

  • 生命周期小结

image.png

1.1.2Activity(启动模式-standrd)

image.png

  • standrd:默认模式,允许重复

image.png

  • singleTop:不允许连续重复

image.png

  • singleTask:不允许同个栈内重复

image.png

  • singleInstance:整个系统不允许重复
  • 启动模式小结

image.png

1.2Fragment(轻量级的Activity)

  • Fragment简介
  • Fragment是轻量级的Activity。
  • Fragment创造是为了解决Activity碎片化的问题
  • Fragment特点:就是速度快,Activity的产生需要系统内核统一调用,时间消耗多。

image.png

  • Fragment基本用法
  1. 创建Fragment布局文件
  2. 创建Fragment子类,加载布局文件
  3. Activity加载Fragment :(1)静态加载:布局中绑定 (2)动态加载:FragmentManager加载
  • Fragment生命周期
  1. 启动:onAttach()-onCreate()-onCreateView()-onActivityCreated()-onStart()-onResume()-Resumed
  2. 退出:Resumed-onPaused()-onStop()-onDestoryView()-onDestory()-onDetach()
  3. 部分覆盖:Resumed-onPause()-Paused
  4. 部分遮挡恢复:Paused-onResume()-Resumed
  5. 完全覆盖:Resumed-onPaused()-onStop()-onDestroyView()
  6. 完全遮挡恢复:onCreateView()-onActivityCreated()-onStart()-onResume()-Resumed
  7. 注:Fragment生命周期可以通过FragmentTransaction.setMaxLifecycle手动干预(如:直接设置在onPause()就结束Fragment生命周期)

image.png

  • Fragment与Activity交互
  1. 该方法适用于任何对象间交互
  2. 组件获取:(1)Fragment获取Activity中的组件:getActivity().findViewById(R.id.xxx)(2)Activity获取Fragment中的组件:getFragmentManager.findFragmentById(E.id.fragment_xxx)
  3. 数据传递:(1)Activity传数据给Fragment:setArguments(Bundle bundle)(2)Fragment传数据给Activity:a.通过对象直接传递(方法调用/接口调用)b.通过viewmodel/handler/broadcast/eventbus等通信。
  • Fragment总结

image.png

1.3 Service

  • Service基本用法
  1. 注册:AndroidManifest中使用<service.../>标签
  2. 创建:建立相应的Service实现类
  3. 加载:startService()/bindService()
  • Service生命周期
  1. OnStart()
  2. onBind()
  3. onCreate()
  4. onDestory()

image.png

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

1.4 Broadcast

  • Boradcast基本用法:
  1. 静态广播:(1)注册:AndroidManifest中使用<receiver.../><intent-filter.../>(3)创建:建立相应的BroadcastReceiver实现类(3)接收:在步骤2类中onReceive()中接收广播(4)发送:Context.sendBroadcast()
  2. 动态广播:(1)注册:Context.registerReceiver()
  • Broadcast(常用广播系统)

image.png

1.5 ContentProvider

  • 生产者:
  1. 注册:AndroidManifest中使用<provider.../>;属性:authorities/exported/readPermission/writePermission
  2. 创建:建立相应的ContentProvider实现类;方法:onCreate/getType.insert/delete/update/query
  • 消费者:
  1. 声明:AndroidManifest中声明权限
  2. 使用:context.getContentResolver();方法:insert/delete/update/query

1.6 Intent

  • Intent简介:
  1. Context.startActivity(Intent)
  2. Context.startService(Intent)
  3. Context.sendBroadcast(Intent)

image.png

  • Intent基本用法
  1. 显示Intent:setComponent/setClass指定具体类
  2. 隐式Intent:Action(动作),Data(数据),Category(类别),Type(数据类型),Component(组件),Extra(扩展信息),Flag(标志位)
  • Intent系统能力

image.png

  1. 使用:startactivity(intent)
  • Intent小结

image.png

2、Android通信组件

2.1 Handler

  • Handler基本用法
  1. 创建:新建Handler,实现HandleMessage(Message)
  2. 构造Message:what/setData()
  3. 发送:子线程调用Handler.sendMessage(Message)发送Message
  4. 处理:在Handler的handMessage(Messaage msg)主线程更新UI
  • Handler核心原理

image.png

2.2 Binder

  • Binder常用IPC方案对比

image.png

  • Binder为什么不用共享内存
  • Linux内核进程隔离

image.png

  • Binder基本用法
  1. 服务端:(1)定义一个AIDL文件(2)实现描述的接口,编写service(3)如果有实体类,需要提供实体类(jar包形式)
  2. 客户端:(1)拿到AIDL文件(2)绑定服务,获得接口持有对象
  • Binder核心原理

image.png

image.png

  • Binder APP启动

image.png

  • 通信组件总结

image.png

  • 本文总结

image.png 原创声明:本文部分图片来源于青训营实习课件,以此为准。