Android 组件详讲

大家好,这是我写的第一篇技术文章,写得不好,请各位谅解,小生会继续努力的!


首先,Android 重要组件包括:Activity(活动)、Service(服务)、Content Provider(数据源组件)、Broadcast Receiver(广播接收器)

Activity - 活动

活动是程序与用户交互的窗口,是 Android 构造中最基本的一种。

它的功能就是:

1、构造界面;

作为用户交互的窗口,活动可用来构造界面,使用 setContentView() 方法可以将相关资源信息设置到内容区域中。

同时可以在活动中找到 layout 中的各种控件,可在活动中动态设置控件的内容等。

2、处理交互事件;

活动可处理用户与程序的交互事件,通过设置控件的监听来实现具体的交互。

它需要为保持各界面的状态,做很多持久化的事情。

每当一个新活动开始,以前的活动已停止,但系统会保持活动堆栈(“回栈”)。


Activity 生命周期:

图就不画了,搜索一下成堆。我就主要讲一下要点好了。生命周期不能乱用,一定要用到点上。以下是我的总结:

1、onCreate()    - 主要使用初始化操作;

2、onStart()   - 主要是用于保持显示给用户 UI 数据和资源;

3、onResume()  - 一般用于数据恢复的操作;

4、onPause()  - 用于保存数据;

5、onDestroy()  - 用于释放资源。


注意:要生命周期方法要相对应来实现

onCreate()     对应  onDestroy() ;

onStart()         对应  onStop() ;

onResume() 对应  onPause() ;


Service - 服务:

Android为了屏蔽进程的概念,利用不同的组件[Activity、Service]来表示进程之间的通信。

服务是运行在后台的,它既不是进程,也不是线程,它是 Android 的一个组件,它没有界面。服务适用于长时间运行的应用功能。

可用于进程间通信,服务它可分为:本地服务、远程服务(AIDL),关于 AIDL 后续文章里会讲到。

注:服务它本身是在主线程中执行的,所以一般要开辟一个新线程。

有个好用的服务叫 IntentService, 它里面建立了有一个子线程。所以使用它就不必开启新线程了。

使用 IntentService 一般搭配的是广播,一个任务执行完,通过广播发送给活动来更新界面等。


服务的生命周期:

图也不画了,说个要点,

服务它有个混淆的概念就是: onBind()  和  onStartConmand()。

服务开始,会执行 onCreate() 跟活动一样方法只执行一次。每次 startService() 都会执行 onStartConmand() 方法。

使用服务的 onBind() 方法,可返回一个 Binder  ,可实现个内部类提供 Service 给外部访问,外部就可以执行服务中的方法了。

[java]  view plain copy
  1. // 实例化 binder  
  2. private IBinder binder = new LocalBinder();  
  3.   
  4. // 定义 binder  
  5. class LocalBinder extends Binder{  
  6.         MyService1 getService(){  
  7.             Log.d(TAG, "LocalBinder");  
  8.             return MyService1.this;  
  9.         }  
  10.     }  
  11.   
  12.   
  13. // 返回一个 binder  
  14. @Override  
  15.     public IBinder onBind(Intent intent) {  
  16.         Log.d(TAG, "onBind");  
  17.         return binder;  
  18.     }  


Content Provider - 数据源组件:

数据源组件并不包含特定的功能逻辑,而是负责为应用提供数据访问的接口。

它是 Android 第三方应用数据的访问方案,例如:你要访问手机中的联系人就需要通过数据源组件来访问。

它对外提供数据,实现它 需要重写六个方法: onCreate、query、getType、insert、delete、update

getType 是获得类型,MIME 类型 , 如果是目录则返回:  "vnd.android.cursor.dir/" + PATH  , 如果是具体内容则返回: "vnd.android.cursor.item/" + PATH

其他就像数据库操作一样,不用多讲。

使用它的好处就是可以屏蔽内部数据的存储细节,向外提供统一的接口模型。这样外部访问时,就直接使用 ContentResolver 来访问。


Broadcast Receiver - 广播接收器:

广播接收器接收一种或多种 Intent 作触发的事件,它用于监听各种系统或系统中其他应用发生的事件,做出响应。

它的注册,可分为动态注册和静态注册,所谓动态就是通过 Context.registerReceiver 来注册,通过 Context.unregisterReceiver 来解除注册;

而静态注册就是讲广播接收器的相关信息写在配置文件中。

静态注册这种方式的注册不是常驻型的,也就是说当应用关闭后,如果有广播信息传来,Receiver也会被系统调用而自动运行。

动态注册是常驻型,也是常用的方式,但注意,有注册就一定要有解除注册。不然会有系统异常。


以上四个重要组件,除了接收器可以动态注册以外,其他三个都必须在配置文件中注册。

同时要注意的是:所有组件都是在主线程中运行的,所以如果有耗时操作,一定要开辟新线程来执行,不然会 ANR 。

Service 的话,如果是执行简单的事情,可使用 IntentService - 这个里面已经提供了子线程,所以就不需要开辟线程了,能够更方便的使用。

但是要注意的就是 IntentService 的生命周期跟普通 Service 的生命周期不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值