Android组件介绍 | 青训营笔记
这是我参与[第四界青训营] 笔记创作活动的第一天。 本文主要记录了android应用开发中的基本组件和通信组件,以及个人思考,内容仅供参考,如有错误欢迎指正QAQ。
1.Android基础组件
1.1界面组件 Activity
生命周期:
1.1.1 Activity 界面容器
1. 作用:前台交互,程序入口,布局容器。
2. 基本步骤:1.配置程序清单AndroidManifest.xml,声明主程序入口。
2.声明布局文件mianActvity.xml。
3.逻辑代码进行页面绑定。
3. 生命周期:onCreate():创建时回调,一般在此处创建视图和绑定数据。
onStart():已启动,即将进入前台。
onResume():与用户开始交互,位于Activity栈顶。
onPause():Activity失去焦点或已暂停,Activity界面部分可见,下一个 生命周期是onResume()或onStop()。
onStop():Activity不再可见,下一个回调是onRestart()或onDestory()
onRestart():重启已停止的Activity,下一个回调是onStart()
onDestory():销毁Activity,释放该Activity的所有资源。
onSaveInstanceState():在非正常关闭时回调,用于保存数据,不支持持久化数据。
onRestoreInstanceState()/onCreate():用于恢复数据
4.配置发生变化:销毁->重建
配置改变不重建:修改AndroidManifest配置中configChange属性(onConfingurationChanged())
local:语言改变
fontScale:字体大小改变
orientation:旋转屏幕
keybordHidden:键盘显示隐藏
注:一般在onPause()和onStop()或onSaveInstanceState()阶段保存数据
1.1.2 Activity 启动模式 android:lanuchMode
standard-默认模式,允许重复,在页面栈上新增,会出现重复
singleTop-不允许连续重复,栈顶复用
singleTask-页面栈中不允许页面重复,栈内复用
singleInstance-整个系统页面不允许重复
个人总结
Activity是Android开发中重要的一部分,负责app界面的设计,Activity的切换对应应用界面的切换跳转。
1.2 Fragment
解决页面碎片化问题
1.2.1 基本用法
1.创建Fragment布局文件
2.创建Fragment子类,加载布局文件
3.Activity加载Fragment
静态加载:布局中绑定
动态加载:FragmentManager加载
1.2.2 生命周期
onAttach()-Fragment和Activity建立关联
onCreateView()-创建视图
onActivityCreater()-onCreate()方法返回
onDestoryView()-视图被移除时调用
onDetach()-Fragment和Activity取消关联
1.启动:onAttach()-onCreate()-onCreateView()-onActivityCreater()-onStart()-onResume()-Resumed()
2.部分遮挡:Resumed-onPause()-Paused
3.部分遮挡恢复:Paused-onResumed()-Resumed
4.完全遮挡:Resumed-OnPause()-onStop()-onDestroyView()
5.完全遮挡恢复:onCreateView()-onActivityCreated()-onStart()-onResume()-Resumed
1.2.3 组件获取 数据传递
Fragment获取Activity中的组件:getActivity().findViewById(R.id.xx)
Activity获取Fragment中的组件:getFragmanager().findFragmentById(R.id.fragment_xx)
Activity-->Fragment:setArguments(Bundle bundle)
Fragment-->Activity:通过对象直接传递
通过viewmodel/handler/broadcast等
1.3服务组件 Service
1.3.1 基本用法
1.注册:<service...>标签
2.创建:建立Service实现类
3.加载:startService()/bindService()
1.3.2 生命周期
onStart(),onBind(),onCreate(),onDestory()
1.3.3 与Activity通信
1.定义Binder子类,并实现getService()方法,返回Service对象
2.实现Service类onBind()方法,返回上述Binder对象
3.实例化ServiceConnection对象,实现onServiceConnected()方法,从中获取到Service实例
4.Activity实调用bindService()方法,并传递步骤3的ServiceConnection对象,将流程跑起来
5.Activity既可以通过调用Service实例中的方法进行直接通信
1.4广播对象 Broadcast
1.4.1 基本用法
静态广播
1注册:AndroidManifest中使用<receiver...l><intent-filter...>
2创建:建立相应的BroadcastReceiver实现类
3接收:在步骤2类onReceive()中接收广播
4发送:Context.sendBroadcast()
动态广播
Context.registerReceiver()
1.5 数据通信 ContentProvider
1.5.1 基本用法
生产者
1 注册:AndroidManifest中使用<provider...>
属性: authorities / exported / readPermission / writePermission
2 创建:建立相应的ContentProvider实现类
方法: onCreate/ getType / insert / delete / update / query
消费者
1声明:AndroidManifest中声明权限
2使用:context.getContentResolver(方法: insert / delete / update / query
1.6 意图 Intent
基本用法
1显式lntent
setComponent/ setClass指定具体类
2隐式Intent
Action(动作)Data(数据)Category(类别)Type(数据类型)Component(组件)Extra(扩展信息)Flag(标志位)
2.Android通信组件
2.1 Handler
处理主线程通信
1创建:新建Handler,实现handleMessage(Message)
2构造Message : what / setData()
3发送:子线程调用Handler.sendMessage(Message)发送Message
4处理:在Handler的handleMessage(Message msg)主线程更新UI
2.2 Binder
进程通信
服务端
1.定义一个AIDL文件
⒉实现描述的接口,编写service
3.如果有实体类,需要提供实体类(jar包形式)
客户端
1.拿到AIDL文件
2.绑定服务,获得接口持有对象