要学习Android开发必须要首先要了解Android的四大组件,这是Android里最基础也是比较重要的知识。Android的四大组件也称为Android的四大天王分别是Activity、Service、BroadCast Recevicer、Content  provider。

      Activity

      先从Activity谈起,大多数的应用都有界面,有界面首先就离不开Acitivity。

      1.Activity的定义和作用:Activity的中文意思就是活动,代表手机屏幕的一屏,或是平板中的一个窗口,提供了和用户交互的可视化界面。Activity是用于处理UI相关业务的,比如加载界面、监听用户操作等事件。

      2.Activity的简单用法:

         (1)创建Activity

package mystudio.hbq.com.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}

      (2)写布局文件

<?xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="mystudio.hbq.com.myapplication.MainActivity">            android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Hello World!" />

(3)在AndroidManifest.xml 文件配置Activity

android:name=".MainActivity">            android:name="android.intent.action.MAIN" />        android:name="android.intent.category.LAUNCHER" />    

 通过以上三步一个基本的Activity就可以启动了。

      Service

      接着我们来谈谈Service即服务,是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。Service的官方定义:Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件。其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行。另外,一个组件能够绑定到一个service与之交互(IPC机制),例如,一个service可能会处理网络操作,播放音乐,操作文件I/O或者与内容提供者(content provider)交互,所有这些活动都是在后台进行。

       Service的两种启动状态:

       启动状态,当应用组件通过调用 startService() 启动服务时,服务即处于“启动”状态。一旦启动,服务即可在后台无限期运行,即使启动服务的组件已被销毁也不受影响,除非手动调用才能停止服务, 已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。

        绑定状态,当应用组件通过调用 bindService() 绑定到服务时,服务即处于“绑定”状态。绑定服务提供了一个客户端-服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至是利用进程间通信 (IPC) 跨进程执行这些操作。 仅当与另一个应用组件绑定时,绑定服务才会运行。 多个组件可以同时绑定到该服务,但全部取消绑定后,该服务即会被销毁。

    BraodCast Receiver

       BroadcastReceiver就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。

       在Android系统中,广播体现在很多方面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。

       广播分为两个角色:广播发送者、广播接收者。

         发送广播,调用Context对象的sendBroadcast(Intent)即可发送广播,在参数Intent对象中,应该调用setAction()方法配置广播的“频道号”,即是相当于收音机要接收某个电台的频段,只有注册了相同的Action的广播接收者才可以接收到该广播。

         接收广播

        1.开发广播接收器,自定义类,继承自android.content.BroadcastReceiver后需要注册,注册时,使用IntentFilter配置与发送方相同的Action,重写onReceiver()方法实现对广播的处理。

public class MyBroadcastReceiver extends BroadcastReceiver {    private static final String TAG = "MyBroadcastReceiver";    @Override    public void onReceive(Context context, Intent intent) {        StringBuilder sb = new StringBuilder();        sb.append("Action: " + intent.getAction() + "\n");        sb.append("URI: " + intent.toUri(Intent.URI_INTENT_SCHEME).toString() + "\n");        String log = sb.toString();        Log.d(TAG, log);        Toast.makeText(context, log, Toast.LENGTH_LONG).show();    }}

            这样就开发了一个广播接收器。

            2.注册广播接收器,可以区分为静态注册和动态注册:

           (1)静态注册,在清单文件AndroidManifest.xml中,在application节点下使用receiver节点进行注册。这种方式注册的广播接收者必须是一个单独的只实现BroadcastReceiver的类,不能是内部类。且这样的广播接收者是常驻型的,即从APP安装到手机上的那一刻即开始处于接收广播状态,且直至该APP被从手机移除。

                           

           (2)动态注册

  • 在程序中调用Context对象的registerReceiver(BroadcastReceiver, IntentFilter)方法进行注册。这种方式可以注册以内部类的形式存在的广播接收者,且这种方式的广播接收者仅当注册后才开始接收广播,并且在调用了Context对象的unregisterReceiver(BroadcastReceiver)方法后就会停止接收广播。
BroadcastReceiver br = new MyBroadcastReceiver();IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);intentFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);this.registerReceiver(br, filter);

ContentProvider

       ContentProvider即内容提供者,可以将应用程序自身的数据对外(对其它应用程序)共享,使得其它应用可以对自身的数据进行增、删、改、查操作。 
       Android系统使用了许多ContentProvider,将系统中的绝大部分常规数据进行对外共享,例如:联系人资料、通话记录、短信、相册、日历等等,一般这些数据都存放于一个个的数据库中。 

    我们自己的app可以实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProvider是以类似数据库中表的方式将数据暴露的。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URL来表示外界需要访问的“数据库”。


更多相关文章

  1. Android学习笔记(二八):字体
  2. 【Android布局】在程序中设置android:gravity 和 android:layout
  3. Android中属性gravity和layout_grativy的区别
  4. ch010 Android(安卓)GridView
  5. ch014 Android(安卓)AppWidget
  6. ch010 Android(安卓)GridView
  7. 自定义组件
  8. CSDN 很经典的博客 您值得一览
  9. Android开机广播

随机推荐

  1. android ProgressBar定制模式,自定义模式
  2. android anr traces日志分析方法
  3. Android解锁屏幕失效问题
  4. Android(安卓)studio gradle 配置阿里镜
  5. Android(安卓)关于微信分享图片过大失败
  6. android应用安全——组件通信安全(Intent)
  7. 时间和日期选择器DatePicker和TimePicker
  8. Android桌面小组件:最简例子
  9. 相机的研究
  10. Android(安卓)MPChart—柱状图