这是我参与「第四届青训营 」笔记创作活动的第2天
1、Android基础控件
1.1界面组件(Activity&Fragment)
1.1.1Activity(生命周期)
- WHAT:界面容器,简单理解每一张页面就是一个实体。
- WHAT:作用:前台交互+程序入口+布局容器
- Activity用法:Activity 使用详解 - 掘金 (juejin.cn)
- Activity生命周期:Android技能树 — Activity小结 - 掘金 (juejin.cn)
onCreate():创建时回调,一般在此处创建视图和绑定数据。onStart():已启动,即将进入前台OnResume():与用户开始交互,位于Activity栈顶onPause():Actvity失去焦点或已暂停,Activity界面部分可见,下一个生命周期是onResume()或onStop()onStop():Activity不再可见,下一个回调是onRestart()或onDestory()onRestart():重启已停止的Activity,下一个回调是onStart()onDestory():销毁Actvity,释放该Activity的所有资源onSaveInstanceState():在非正常关闭时回调,用于保存数据,不支持持久化数据onRestoreInstaceState()/onCreate():用于恢复数据
- 常用场景举例:
- 打开页面:1-2-3
- 关闭页面:4-5-6
- 注意:Android4.0在onPause()处结束,Android5.0在onStop()处结束。
- 1部分遮挡:当我们浏览某一个页面时,如果出现授权提示框,就会出现部分遮挡,这时将调用onPause(),进入Paused状态。
- 2遮挡恢复:之后再进入Resumed状态,恢复正常。
-
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()
-
生命周期小结
1.1.2Activity(启动模式-standrd)
- standrd:默认模式,允许重复
- singleTop:不允许连续重复
- singleTask:不允许同个栈内重复
- singleInstance:整个系统不允许重复
- 启动模式小结
1.2Fragment(轻量级的Activity)
- Fragment简介:
- Fragment是轻量级的Activity。
- Fragment创造是为了解决Activity碎片化的问题
- Fragment特点:就是速度快,Activity的产生需要系统内核统一调用,时间消耗多。
- Fragment基本用法:
- 创建Fragment布局文件
- 创建Fragment子类,加载布局文件
- Activity加载Fragment :(1)静态加载:布局中绑定 (2)动态加载:FragmentManager加载
- Fragment生命周期:
- 启动:onAttach()-onCreate()-onCreateView()-onActivityCreated()-onStart()-onResume()-Resumed
- 退出:Resumed-onPaused()-onStop()-onDestoryView()-onDestory()-onDetach()
- 部分覆盖:Resumed-onPause()-Paused
- 部分遮挡恢复:Paused-onResume()-Resumed
- 完全覆盖:Resumed-onPaused()-onStop()-onDestroyView()
- 完全遮挡恢复:onCreateView()-onActivityCreated()-onStart()-onResume()-Resumed
- 注:Fragment生命周期可以通过FragmentTransaction.setMaxLifecycle手动干预(如:直接设置在onPause()就结束Fragment生命周期)
- Fragment与Activity交互:
- 该方法适用于任何对象间交互
- 组件获取:(1)Fragment获取Activity中的组件:getActivity().findViewById(R.id.xxx)(2)Activity获取Fragment中的组件:getFragmentManager.findFragmentById(E.id.fragment_xxx)
- 数据传递:(1)Activity传数据给Fragment:setArguments(Bundle bundle)(2)Fragment传数据给Activity:a.通过对象直接传递(方法调用/接口调用)b.通过viewmodel/handler/broadcast/eventbus等通信。
- Fragment总结
1.3 Service
- Service基本用法:
- 注册:AndroidManifest中使用<service.../>标签
- 创建:建立相应的Service实现类
- 加载:startService()/bindService()
- Service生命周期:
OnStart()onBind()onCreate()onDestory()
- Service与Activity通信:
- 定义Binder子类,并实现getService()方法,返回Service对象
- 实现Service类onBind()方法,返回上述Binder对象
- 实例化ServiceConnection对象,实现onServiceConnected()方法,从中获取到Service实例
- Activity中调用bindService()方法,并传递步骤3的ServiceConnection对象,将流程跑起来
- Activity既可以通过调用Service实例中的方法进行直接通信
1.4 Broadcast
- Boradcast基本用法:
- 静态广播:(1)注册:AndroidManifest中使用<receiver.../><intent-filter.../>(3)创建:建立相应的BroadcastReceiver实现类(3)接收:在步骤2类中onReceive()中接收广播(4)发送:Context.sendBroadcast()
- 动态广播:(1)注册:Context.registerReceiver()
- Broadcast(常用广播系统)
1.5 ContentProvider
- 生产者:
- 注册:AndroidManifest中使用<provider.../>;属性:authorities/exported/readPermission/writePermission
- 创建:建立相应的ContentProvider实现类;方法:onCreate/getType.insert/delete/update/query
- 消费者:
- 声明:AndroidManifest中声明权限
- 使用:context.getContentResolver();方法:insert/delete/update/query
1.6 Intent
- Intent简介:
Context.startActivity(Intent)Context.startService(Intent)Context.sendBroadcast(Intent)
- Intent基本用法:
- 显示Intent:setComponent/setClass指定具体类
- 隐式Intent:Action(动作),Data(数据),Category(类别),Type(数据类型),Component(组件),Extra(扩展信息),Flag(标志位)
- Intent系统能力:
- 使用:startactivity(intent)
- Intent小结:
2、Android通信组件
2.1 Handler
- Handler基本用法:
- 创建:新建Handler,实现HandleMessage(Message)
- 构造Message:what/setData()
- 发送:子线程调用Handler.sendMessage(Message)发送Message
- 处理:在Handler的handMessage(Messaage msg)主线程更新UI
- Handler核心原理:
2.2 Binder
- Binder常用IPC方案对比:
- Binder为什么不用共享内存:
- Linux内核进程隔离
- Binder基本用法:
- 服务端:(1)定义一个AIDL文件(2)实现描述的接口,编写service(3)如果有实体类,需要提供实体类(jar包形式)
- 客户端:(1)拿到AIDL文件(2)绑定服务,获得接口持有对象
- Binder核心原理:
- Binder APP启动:
- 通信组件总结:
- 本文总结:
原创声明:本文部分图片来源于青训营实习课件,以此为准。