这是我参与「第四届青训营 」笔记创作活动的第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通信
- 定义Binder子类,并实现getService()方法,返回Service对象
- 实现Service类onBind()方法,返回上述Bind对象
- 实例化ServiceConnection对象,实现onServiceConnection()方法,从中获取Service空间
- Activity中调用bindService()方法,并传递步骤3的Serviceconnection对象,将流程跑起来
- Activity可以通过调用Service实例中的方法进行直接通信
四、Broadcast
1.基本用法
- 静态广播
- 注册:AndroidManifest使用<receiver.../><intent-filter.../>
- 创建:建立相应的BroadcastReceiver实现类
- 接收:在步骤2类onReceive()中接收广播
- 发送: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
基本用法
- 生产者
- 注册:AndroidManifest中使用<provider.../>
属性:authorities/exported/readPermission/writePermission - 创建:建立相应的ContentProvider实现类
方法:onCreate/getType/insert/delete/update/query
- 消费者
- 声明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.绑定服务,获得接口持有对象
今日学习总结
这次课我学习到了客户端各个组件的使用方法,但是内容有很多,需要经常复习。