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

206 阅读4分钟

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

Android常用组件

Android基础组件

一、 界面组件

也称界面容器,它的需求为图片浏览器

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

1.基本用法

注册——>布局——>绑定

2.生命周期

  • onCreat():创建时回调,一般在此处创建视图和绑定数据
  • onStart():已启动,即将进入前台
  • onResume():与用户开始交互,位于Activity栈顶
  • onPause():Activity界面部分课件,下一个生命周期是onResume()或onStop()
  • onStop():Activity不再可见,下一个回调是onRestart()或onDestory()
  • onRestart():重启已停止的Activity,下一个回调是onStart()
  • onDestory():销毁Activity,释放该Activity的所有资源
  • onSavelnstanceState():非正常关闭时回调,用于保存数据,不支持持久化数据
  • onRestorelnstanceState()/onCreat():用于恢复数据
小结
  • 启动退出场景
    启动:onCreate()-onStrat()- onResume()
    退出: onPause()-onStop()- onDestory()
  • 部分遮挡
    遮挡:onPause()
    恢复:onResume()
  • 完全遮挡
    遮挡:onPause() -onSavelnstanceState()-onStop() 恢复:onStart()-onResume()
  • 配置变更
    未配置——>销毁: onSavelnstanceState()-onPause()-onStop()-onDestory()
    ——>重建:onCreat()-onStart()-onRestorelnstanceState()- onResume()
    已配置:onConfigurationChanged()
  • 后台回收
    销毁:不会有时机处理 重建: onCreat()- onStart()- onRestorelnstanceState()- onResume()

4.启动模式

  • standard:默认模式,允许重复
  • singleTop:不允许连续重复
  • singleTask:不允许同个栈内重复
  • singlelnstance:整个系统不允许重复

二、Fragment

特点:碎片化,速度快

1.基本用法

(1)创建Fragment布局文件
(2)创建Fragment子类,加载布局文件
(3)Activity加载Fragment

  • 静态加载:布局中绑定
  • 动态加载:FragmentManager加载

2.生命周期

  • onAttach():Fragment和Activity建立关联时调用
  • onCreateView():当Fragment创建视图时调用
  • onActivityCreated():Activity的onCreate()方法已返回时调用
  • onDestoryView():当Fragment中的视图被移除时调用
  • onDetach():Fragment和Activity取消关联时调用
小结
  • 启动: onAttach()-onCreateView()-onActivityCreated()-onStart()- onResume()-Resumed
  • 退出:Resumed-onPause()-onStop()-onDestoryView()-onDestory()- onDetach()
  • 部分覆盖:Resumed-onPause()-Paused
  • 部分遮挡恢复:Paused-onResume()-Resumed
  • 完全覆盖:Resumed-onPause()-onStop()- onDestoryView()
  • 完全遮挡恢复:onCreateView()-onActivityCreated()-onStart()-onResume()-Resumed

3.与ACtivity交互

  • 组件获取:getActivity()FragmentManager.findFragmentById()
  • 数据传递:setArgument、方法调用、异步方式(viewmodel、handler、braodcast)

三、Service

1.基本用法

注册:AndroidManifest中使用<service.../>标签
创建:建立相应的Service实现类
加载:starService()/bindService()

2.生命周期

  • onStart()
  • onBind()
  • onCreate()
  • onDestory()

3.与Activity通信

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

四、Broadcast

1.基本用法

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

2.常用系统广播

Intent.ACTION_CONNECTIVITY_CHANGE Intent.ACTION_BATTERY_CHANGED Intent.ACTION_SCREEN_ON Intent.ACTION_PACKAGE_INSTALL Intent.ACTION_BOOT_COMPLETED Intent.ACTION_PACKAGE_ADDED Intent.ACTION_PACKAGE_REPLACED Intent.ACTION_PACKAGE_REMOVED

五、ContentProvider

基本用法

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

六、Intent

基本用法

1.显式Intent setComponent/setClass指定具体类
2. 隐式Intent Action(动作) Data(数据) Category(类别) Type(数据类型) Component(组件) Extra(扩展信息) Flag (标志位)

系统能力

电话:Intent(lntent.ACTION DIAL, Uri.parse("tel:10010"))
短信:Intent(lntent.ACTION SENDTO, Uri.parse("smsto:10010"))
网页:Intent(Intent.ACTION VIEW, Uri.parse("www.baidu.com"))
邮件:Intent(lntent.ACTION SENDTO, Uri.parse("mailto:someone@domain.com")
地图:Intent(lntent.ACTION VIEW, Uri.parse("geo:39.9,116.3"))
拍照:Intent(MediaStore.ACTION IMAGE CAPTURE)
设置:Intent(android.provider.Settings.ACTION SETTINGS)
市场:Intent(Intent.ACTION VIEW, Uri.parse("market://details?id=" + packageName)

Android通信组件

Handle

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

Binder

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

今日学习总结

这次课我学习到了客户端各个组件的使用方法,但是内容有很多,需要经常复习。