这是我参与「第四届青训营 」笔记创作活动的第2天
Android基础组件
Activity
是Android四大基本组件之一,用于展示数据实现与用户的交互的容器。
Activity生命周期
onCreate():创建时回调,一般在此处创建视图和绑定数据onStart():已启动,即将进入前台onResume():与用户开始交互,位于Activity栈顶onPause():Actvity失去焦点或已暂停,Activity界面部分可见,下一个生命周期是onResume()或onStop()onStop():Activity不再可见,下一个回调是onRestart()或onDestory()onRestart():重启已停止的Activity,下一个回调是onStart()onDestory():销毁Actvity,释放该Activity的所有资源onSaveInstanceState():在非正常关闭时回调,用于保存数据,不支持持久化数据onRestoreInstanceState()/onCreate():用于恢复数据
Activity启动模式
- Standard 启动模式(允许重复)
- SingleTask 启动模式(不允许同个栈内重复)
- SingleTop 启动模式(不允许连续重复)
- SingleInstance 启动模式(整个系统不允许重复)
Fragment
Fragment 表示 FragmentActivity 中的行为或界面的一部分。可以在一个 Activity 中组合多个片段,从而构建多窗格界面;可以将 Fragment 视为 Activity 的模块化组成部分。
基本用法
- 创建Fragment布局文件
- 创建Fragment子类,加载布局文件
- Activity加载Fragment
- 静态加载:布局中绑定
- 动态加载:FragmentManager加载
生命周期
-
onAttach() 在Fragment 和 Activity 建立关联是调用(Activity 传递到此方法内)
-
onCreateView() 当Fragment 创建视图时调用
-
onActivityCreated() 在相关联的 Activity 的 onCreate() 方法已返回时调用。
-
onDestroyView() 当Fragment中的视图被移除时调用。
-
onDetach() 当Fragment 和 Activity 取消关联时调用。
Fragment与Activity交互
-
组件获取
- Fragment获取Activity中的组件:
getActivity().findViewByld(R.id.Xxx) - Activity获取Fragment中的组件:
getFragmentManager.findFragmentByld(R.id.fragment_xxx)
- Fragment获取Activity中的组件:
-
数据传输
- Activity传数据给
Fragment:setArguments(Bundle bundle) - Fragment传数据给Activity: 通过对象直接传递(方法调用/接口调用)/ 通过viewmodel/handler/broadcast/eventbus等通信
- Activity传数据给
Service
Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。Service 可以由其他应用组件启动,即便用户切换到其他应用,Service 仍将在后台继续运行。
基本用法
- 注册:AndroidManifestl中使用<service../>标签
- 创建:建立相应的Service实现类
- 加载:startService()/bindService()
生命周期
onStartCommand():服务会启动并可在后台无限期运行onBind():与Activity绑定onCreate():初始化onDestory:即将销毁
Service与Activty通信
-
定义Binder子类,并实现getService()方法,返回Service对象
-
实现Service类onBind()方法,返回上述Binder对象
-
实例化ServiceConnection对象,实现onServiceConnected()方法,从中获取到Service实例
-
Activity中调用bindService()方法,并传递步骤3的ServiceConnection对象,将流程跑起来
-
Activity既可以通过调用Service实例中的方法进行直接通信
Broadcast
当系统有些要全局通告的事件时(比如开关机、网络变化、电量变化等),会发送对应的广播
基本用法
- 静态广播
-
注册:AndroidManifest中使用<receiver.../><intent-filter.../> -
创建:建立相应的BroadcastReceiver实现类 -
接收:在步骤2类onReceive()中接收广播 -
发送:Context.sendBroadcast()
- 动态广播
-
注册:Context.registerReceiver()
常用系统广播
- 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
ContentProvider&Intent
ContentProvider
提供数据通信功能,一般是拿系统的数据(比如电话、联系人、相册等)
基本用法:
-
生产者
- 注册:AndroidManifest中使用<provider.../>
- 属性:authorities/exported/readPermission/writePermission
- 创建:建立相应的ContentProvider实现类
- 方法:onCreate/getType/insert/delete/update/query
-
消费者
- 声明:AndroidManifest中声明权限
- 使用:context.getContentResolver()
- 方法:insert/delete/update/query
Intent
表达意图(比如调用系统打电话的服务等)
- Context.startActivity(Intent)
- Context.startService(Intent)
- Context.sendBroadcast(Intent)
基本用法:
-
显式Intent
- setComponent/setClass指定具体类
-
隐式Intent
- Action(动作)
- Data(数据)
- Category(类别)
- Type(数据类型)
- Component(组件)
- Extra(扩展信息)
- Flag(标志位)
Android通信组件
Handler
通常被我们用来做主线程与子线程之间的通信工具,而 Handler 作为 Android 中消息机制的重要一员也确实给我们的开发带来了极大的便利。
基本用法:
- 创建:新建Handler,实现handleMessage(Message)
- 构造:Message:what / setData()
- 发送:子线程调用Handler.sendMessage(Message)发送Message
- 处理:在Handler的handleMessage(Message msg)主线程更新UI
Binder
从字面上来解释 Binder 有胶水、粘合剂的意思,顾名思义就是粘和不同的进程,使之实现通信
基本用法:
-
服务端
- 1.定义一个AIDL文件
- 2.实现描述的接口,编写service
- 3.如果有实体类,需要提供实体类(jar包形式)
-
客户端
- 1.拿到AIDL文件
- 2.绑定服务,获得接口持有对象