Android基础组件 | 青训营笔记

162 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第1天。

作为一个刚入门的学习安卓开发的新手,对于安卓开发的了解首先从Android的基础组件入手。

一、Activity ——界面组件

通俗来讲Activity就相当于一个界面容器,在作为用户时最直观看到的内容其实就是Activity这个组件所承载的。它的作用是实现了前台交互、程序入口、布局容器。举个例子:实现一个图片浏览APP所使用的就是Activity+Fragment。

基本用法

1、要声明在程序清单里面(AndroidMainfest.xml),并且在MainActivity.java中完成类的编写,并且在程序清单中进行声明以及intent-filter(启动入口)。

2、声明一个布局文件(页面),在MainActivity中进行绑定。

注册->布局->绑定

生命周期

  • onCreate():创建时回调,一般在此创建视图、绑定数据。
  • onStart():已启动,即将进入前台(界面不可见)。
  • onResume():与用户开始交互,位于Activity栈顶。
  • onPause():Activity失去焦点或者已暂停,Activity界面部分可见,下一个生命周期是onResume()或onStop()。
  • onStop():Activity不再可见,下一个回调是onRestart()或onDestory()。
  • onRestart():重启已经停止的Activity的所有资源。
  • onDestory():销毁Activity,释放该Activity的所有资源。
  • onSaveInstanceState():在非正常关闭时回调,用于保存数据,不支持持久化数据。
  • onRestoreInstanceState():用于恢复数据。

生命周期描述的是一个类 从创建 (new 出来 ) 到死亡 ( 垃圾回收 ) 的过程中会执行的方法。

在这个过程中 会针对不同的生命阶段会调用不同的方法Activity 从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法在前面已经介绍了,其实这些方法都是两两对应的:

  • onCreate()创建与 onDestroy()销毁;
  • onStart()可见与 onStop()不可见;
  • onResume()可编辑(即焦点)与 onPause();
  • onRestart()方法在 Activity 被 onStop()后,但是没有被 onDestroy() ,在再次启动此 Activity 时就调用 onRestart() (而不再调用 onCreate() )方法;
  • 如果被 onDestroy()了,则是调用 onCreate() 方法。

启动模式

  • standard:默认模式,允许重复
  • singleTop:栈顶复用,不允许连续重复
  • singleTask:栈内复用,不允许同个栈内重复
  • singleInstance:全局复用,整个系统不允许重复

二、Fragment ——解决碎片化问题、界面组件

Fragment碎片化、速度快、可以实现一部分的组件分离

基本用法

与Activity类似

  1. 创建Fragment布局文件
  2. 创建Fragment子类,加载布局文件
  3. Activity加载Fragment。静态加载:布局中绑定;动态加载:FragmentManager加载

生命周期

  • onAttach():Fragment和Activity建立关联时调用。
  • onCreateView():当Fragment创建视图时调用。
  • onActivityCreated():Activity的onCreate()方法已返回时调用。
  • onDestroyView():当Fragment中的视图被移除时调用。
  • onDetach():Fragment和Activity取消管理时调用。

生命周期可通过FragmentTransaction.setMaxLifecycle()手动干预。

Fragment与Activity交互

组件获取

  1. Fragment获取Activity中的组件:getActivity().findViewById(R.id.xxx)。
  2. Activity获取Fragment中的组件:getFragmentManager.findFragmentById(R.id.fragment_xxx)。

数据传递

  1. Activity传数据给Fragment:setArguments(Bundle bundle)。
  2. Fragment传数据给Activity:通过对象直接传递(方法调用/接口调用);通过viewmodel/hander/broadcast/eventbus等通信。

三、Service ——服务组件

后台界面,例如下载进度之类的,前台看不见。

基本用法

  1. 注册:AndroidManifest中使用<service.../>标签
  2. 创建:建立相应的Service实现类
  3. 加载:startService()/bindService() 在加载的时候,如果需要与服务器进行交互,则使用bindService();若只是单纯的想启动,可使用startService()。

生命周期

常用的

  • onStart()
  • onBind()
  • onCreate()
  • onDestory()

Service与Activity通信

  1. 定义Binder子类,并实现getService()方法,返回Service对象。
  2. 实现Service类onBind()方法,返回上述Binder对象。
  3. 实例化ServiceConnection对象,实现onServiceConnected()方法,从中获取到Service实例。
  4. Activity中调用bindService()方法,并传递步骤3的ServiceConnection对象,将流程跑起来
  5. Activity既可以通过调用Service实例中的方法进行直接通信.

四、 Broadcast ——广播组件

静态广播:

  1. 注册:AndroidManifest中使用<receiver.../><intent-filter.../>。
  2. 创建:建立相应的BroadcastReceiver实现类。
  3. 接收:在步骤2类onReceive()中接收广播。
  4. 发送:Context.sendBroadcast()。

动态广播: 注册:Context.registerReceiver()

五、ContentProvider ——数据组件

生产者:

  1. 注册:AndriodManifest中使用<provider.../>

    属性:authorities/exported/readPermission/writePermission

  2. 创建:建立相应的ContentProvider实现类

    方法:onCreate/getType/insert/delete/update/query

消费者:

  1. 声明:AndroidManifest中声明权限

  2. 使用:context.getContentResolver()

    方法:insert/delete/update/query

六、Intent ——意图

前面组件所需要的对象,将意图发送给系统

基本用法

显式Intent: setComponent/setClass指定具体类

隐式Intent: Action、Data、Category、Type、Compont、Extra、Flag