这是我参与「第四届青训营 」笔记创作活动的第1天。今天学习的内容是android客户端开发的基础知识。
对程序的认知
对程序有what,why,how三个问题。在开发的视角,程序是资源和代码的组成,开发程序为的是改变世界创造价值,开发程序的方式是依靠自己的知识和经验。在用户的角度,程序则是满足用户的需求。
android基础组建
界面组件
activity
activity是界面容器,负责前台交互;程序入口;布局容器的功能
基本用法:在AndroidManifest文件中注册,然后写一个布局文件,然后在activity中绑定布局文件。
activity的生命周期
onCreate(::创建时回调创建视图和绑定数据
onStart():即将进入前台
onResume():可以交互,位于activity栈顶
onPause():失去焦点
onStop():不可见
onRestart():重启activity
onDestory():销毁释放资源
onSaveInstanceState():非正常关闭时回调保存数据
onRestoreInstanceState():数据恢复
常见情况生命周期流程:
打开:create,start,resume
关闭:pause,stop,destory
部分遮挡:pause,恢复后resume
全遮挡:stop, 恢复后restart,resume
配置改变:销毁和重建
配置AdnroidManifest中activity节点的configChange属性,配置改变不重建activity
配置改变回调onConfigurationChanged()
activity的启动模式
standard:默认模式,允许重复
singleTop:不允许连续重复,栈顶单例
singleTask:不允许重复,栈内单例
singleInstance:全局单例,系统应用
Fragment
也是页面容器,实现碎片化,速度快
基本用法:创建布局文件,创建fragment子类,activity动态/静态加载
生命周期
相比fragment的区别
onAttach():与activity绑定时
onCreateVIew():创建视图时
onActivityCreated():activity onCreate后
onDestroyVIew():移除时
onDetach():解绑时
可以使用FragmentTransaction.setMaxLifecycle干预生命周期
组件获取:
fragment.getActivity()
FragmentManager.findFragmetnById()
数据传递:方法调用、viewModel,handler,braodcast
服务组件
Service
基本用法:AndroidManifest注册,实现Service类,启动或者绑定
生命周期
onCreate,onStartCommand(),onDestory()
onCreate,onBind(),onUnbind(),onDestory()
与activity通信
定义Binder子类,实现getService方法返回Service对象,实现onBInd方法返回binder对象,实例化ServiceConnection对象,实现onServiceConnected()方法,从中获取到Service实例,activity中调用bindService(),传递sc对象。
广播组件
Broadcast
作用:系统通知应用响应的工具
基本用法
静态广播:AdnroidManifest注册,创建实现类,onReceive接收,Context.sendBroadcast发送广播
动态广播:Context.registerReceiver()注册
ContentProvider
应用提供数据增删改查
基本用法
生产者:AdnroidManifest注册,创建实现类
消费者:AdnroidManifest申明权限
意图组件
Intent
意图,是需要系统解决的需求
基本用法
显示Intent,指定类实现
隐式Intent,提供动作数据类型frage来让系统判断
android通信组建
Handler
线程间通信
必须在UI线程中更新UI
基本用法:创建handler实现handlerMessage,构造Message,发送,在handlerMessage更新UI
原理:java层消息队列管理消息,native层资源释放
Binder
进程间通信
mmap一次拷贝性能好,linux进程隔离所以不能用共享内存
基本用法
服务端定义AIDL文件,编写service,提供实体类jar包
客户端拿到AIDL文件,绑定service,获得接口持有对象
原理:cs架构,binder驱动和ServiceManager管理服务的注册和获取,传递代理对象。
从Activity冷启动看Binder。