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

94 阅读3分钟

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

Android基础组件

Activity

(1)什么是界面? 微信图片_20220831092426.jpg

2)为什么需要?通过图片浏览器举例

  • 实现一个图片浏览APP(Activity+Fragment) 相册页面+大图页面+调用相机(Intent)
  • 旋转屏幕场景(Activity生命周期)
  • 内置升级能力(Service使用)
  • 单一首页(SingleTask)
  • 相关图片(SingleTop)
  • 扫描全部图片(ContentProvider)
  • 提供图片选择能力给系统(Intent)

(3)Activity生命周期

  • oncreate():创建时回调,一般在此处创建视图和绑定数据
  • onstart():已启动,即将进入前台
  • onresume():与用户开始交互,位于Activity栈顶
  • onpause():activity失去焦点或已暂停,activity界面部分可见,下一个生命周期是onrestart()或onstop()
  • onstop():activity不再可见,下一个回调是onrestart()或ondestory()
  • onrestart():重启已停止的activity,下一个回调是onstart()
  • ondestory():销毁activity,释放该activity的所有资源
  • onsavelnstancestate:在非正常关闭时回调,用于保存数据,不支持持久化数据
  • onrestorelnstancestate()/oncreate():用于恢复数据

7e141a5e-41ea-4df1-a67c-17a00acce2c7.png 注:123打开页面,456关闭界面

(4)配置改变场景 销毁:resumed-onsaveinstancestate()-onpause()-onstop()-ondestory() 重建:oncreate()-onstart()-onrestoreInstance()-onresume() 配置改变不重建activity:androidmanifes中配置activity节点的configchange属性

local:语言改变 fontscale:字体大小改变 orientation:旋转屏幕 keybordhidden:键盘显示隐藏

配置改变:onconfigurationchanged()

小结: b217588b-8b3a-41dd-9e1b-0d1248ed79f9.png (5)Activity启动模式

dd0b4d28-0958-48de-a7c9-0bf2727a3e9d.png Fragment

** 1.优点**

  • 碎片化
  • 速度快

2.基本用法

  • 创建Fragment布局文件
  • 创建Fragment子类,加载布局文件
  • Activity加载Fragment

静态加载:布局中绑定

动态加载:FragmentManager加载

3.生命周期

1e0081a2-24bc-48b5-aa29-52cdbe2498e9.png

  • onAttach()Fragment 和 Activity 建立关联时调用

  • onCreateVlew()当Fragment 创建视图时调用

  • onActivityCreated()Activity的onCreate()方法已返回时调用

  • onDestroyView()当Fragment中的视图被移除时调用 onDetach() Fragment 和 Activity 取消关联时调用

  • 启动:onAttach()-onCreate()-onCreateView-onActivityCreated()-onStart-onResume()-Resumed

  • 退出:Resumed-onPause()-onStop()-onDestoryView()- onDestory()-onDetach()

  • 部分覆盖:Resumed-onPause()-Paused

  • 部分遮挡恢复:Paused-onResume()-Resumed

  • 完全覆盖:Resumed-onPause()-onStop()-onDestroyView()

  • 完全遮挡恢复:onCreateView()-onActivityCreated() onStart()-onResume()-Resumed

注:Fragment生命周期可通过FragmentTransaction.setMaxLifecycle()手动干预

4.Fragment (与Activity交互)

组件获取

1 Fragment获取Activity中的组件:getActivity().findViewByld(R.id.xxx)

2 Activity获取Fragment中的组件:getFragmentManager.findFragmentByld(R.id fragment xox)

数据传递

1Activity传数据给Fragment:setArguments(Bundle bundle)2 Fragment传数据给Activity:

a.通过对象直接传递(方法调用/接口调用)

b.通过viewmodel/handler/broadcast/eventbus等通信

总结:

dd17a7bc-c24b-49d1-9d83-f76a11e55007.png 1.3广播组件-service

1.Service(基本用法)

  • 注册:AndroidManifest中使用<service...i>标签

  • 创建:建立相应的Service实现类

  • 加载:startService()/bindService()

2.生命周期 633d2831-75f5-4426-b656-67fe88d8ccab.png

3. Service(与Activity通信)

  • 定义Binder子类,并实现getServic4()方法,返回Service对象

  • 实现Service类onBind()方法,返回上述Binder对象

  • 实例化ServiceConnection对象,实现onServiceConnected()方法,从中获取到Service实例

  • Activity中调用bindService()方法,并传递步骤3的ServiceConnection对象,将流程跑起来

  • Activity既可以通过调用Service实例中的方法进行直接通信

Broadcast

Broadcast(基本用法)

静态广播

1 注册:AndroidManifest中使用<receiver..i><intent-filter...i>

2 创建:建立相应的BroadcastReceiver实现类

3 接收:在步骤2类onReceive()中接收广播

4 发送:Context.sendBroadcast()动态广播

Broadcast(常用系统广播)

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 PACKAGE_ADDED

Intent.ACTION_PACKAGE_REPLACED

Intent.ACTION_PACKAGE_REMOVED

ContentPrivider

ContentProvider(基本用法)

生产者

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

属性:authorities/exported/readPermission/writePermission

  • 创建:建立相应的ContentProvider实现类

方法:onCreate /getType/insert/delete /update /query

消费者

  • 声明:AndroidManifest中声明权限

  • 使用:context.getContentResolver()方法:insert / delete / update /query

Intent

lntent(基本用法)

  • 显式IntentsetComponent/setClass指定具体类

  • 隐式Intent Action(动作) Data(数据)Category(类别) Type(数据类型) Component(组件) Extra(扩展信息) Flag(标志位)

大家选择性查看,基础小白而已。