这是我参与「第四届青训营 」笔记创作活动的第2天
Android基础组件
Activity
(1)什么是界面?
(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():用于恢复数据
注:123打开页面,456关闭界面
(4)配置改变场景 销毁:resumed-onsaveinstancestate()-onpause()-onstop()-ondestory() 重建:oncreate()-onstart()-onrestoreInstance()-onresume() 配置改变不重建activity:androidmanifes中配置activity节点的configchange属性
local:语言改变 fontscale:字体大小改变 orientation:旋转屏幕 keybordhidden:键盘显示隐藏
配置改变:onconfigurationchanged()
小结:
(5)Activity启动模式
Fragment
** 1.优点**
- 碎片化
- 速度快
2.基本用法
- 创建Fragment布局文件
- 创建Fragment子类,加载布局文件
- Activity加载Fragment
静态加载:布局中绑定
动态加载:FragmentManager加载
3.生命周期
-
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等通信
总结:
1.3广播组件-service
1.Service(基本用法)
-
注册:AndroidManifest中使用<service...i>标签
-
创建:建立相应的Service实现类
-
加载:startService()/bindService()
2.生命周期
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(标志位)
大家选择性查看,基础小白而已。