这是我参与「第四届青训营 」笔记创作活动的第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类似
- 创建Fragment布局文件
- 创建Fragment子类,加载布局文件
- Activity加载Fragment。静态加载:布局中绑定;动态加载:FragmentManager加载
生命周期
- onAttach():Fragment和Activity建立关联时调用。
- onCreateView():当Fragment创建视图时调用。
- onActivityCreated():Activity的onCreate()方法已返回时调用。
- onDestroyView():当Fragment中的视图被移除时调用。
- onDetach():Fragment和Activity取消管理时调用。
生命周期可通过FragmentTransaction.setMaxLifecycle()手动干预。
Fragment与Activity交互
组件获取
- Fragment获取Activity中的组件:getActivity().findViewById(R.id.xxx)。
- Activity获取Fragment中的组件:getFragmentManager.findFragmentById(R.id.fragment_xxx)。
数据传递
- Activity传数据给Fragment:setArguments(Bundle bundle)。
- Fragment传数据给Activity:通过对象直接传递(方法调用/接口调用);通过viewmodel/hander/broadcast/eventbus等通信。
三、Service ——服务组件
后台界面,例如下载进度之类的,前台看不见。
基本用法
- 注册:AndroidManifest中使用<service.../>标签
- 创建:建立相应的Service实现类
- 加载:startService()/bindService() 在加载的时候,如果需要与服务器进行交互,则使用bindService();若只是单纯的想启动,可使用startService()。
生命周期
常用的
- onStart()
- onBind()
- onCreate()
- onDestory()
Service与Activity通信
- 定义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()
五、ContentProvider ——数据组件
生产者:
-
注册:AndriodManifest中使用<provider.../>
属性:authorities/exported/readPermission/writePermission
-
创建:建立相应的ContentProvider实现类
方法:onCreate/getType/insert/delete/update/query
消费者:
-
声明:AndroidManifest中声明权限
-
使用:context.getContentResolver()
方法:insert/delete/update/query
六、Intent ——意图
前面组件所需要的对象,将意图发送给系统
基本用法
显式Intent: setComponent/setClass指定具体类
隐式Intent: Action、Data、Category、Type、Compont、Extra、Flag