Android学习笔记—第二章 Android四大组件

第二章 Android四大组件

  1. Activity(活动窗口):

    Android程序中最基本的模块,为用户操作而展示的可视化用户界面。一个Android应用程序可以只有一个Activity,也可以包含多个Activity,数量及每个Activity的作用取决于应用程序及其设计。

    (1)Activity的生命周期

    创建→运行   onCreate   onStart   onResume

    运行→销毁   onPause    onStop    onDestory

    运行→停止(不可见  不可操作)  onPause   onStop

    停止→恢复   onRestart  onStart  onResume

    运行→暂停(可见  不可操作) onPause

    暂停→恢复 onResume

    备注:当Activity处于暂停或停止状态的时候,如果有更高优先级的应用需要内存时,该Activity所在应用可能被销毁。

    (2)应用举例:数据持久化

    存:onPause  onStop  onDestory

    取:onCreate  onStart  onResume

    (3)创建一个Activity

    在eclipse项目中,“新建”→“other”→“Android”→“Android Activity”

    (4)启动Activity

    Intent intent = new Intent(Activity1.this,Activity2.class);

    startActivity(intent);

    (5)关闭Activity

    finish();

  2. Service(服务):没有界面,运行在后台

    (1)Service的创建:

    a. 创建一个类继承Service

    b. 重写onbind()方法

    c. 清单文件中注册  android:name="包名.类名"

    (2)启动服务

    Intent serviceIntent = new Intent(this,MyService.class);

    startService(serviceIntent);

    备注:第一次启动,会触发Service的onCreate和onStartCommand方法;如果服务已经存在,则多次点击启动服务,只会调用onStartCommand方法。

    (3)停止服务

    stopService(serviceIntent);

    (4)绑定服务

    bindService(serviceIntent,xxx,xxx);

    a. serviceIntent:表示一个Intent对象;

    b. 第二个参数:表示一个ServiceConnection对象,例如:

    ServiceConnection conn =new ServiceConnection;

    c. 第三个参数:Context.BIND_AUTO_CREATE 表示如果服务不存在,会自动创建一个服务。

     (5)解绑服务

    unbindService(conn);

    (5)通过绑定调用Service中的方法

    a. 创建一个类MyBinder继承Binder

    b. 在该类中添加所需要调用的Service中的方法

    c. 在onBinder()方法中,返回一个MyBinder类型的对象

    d. 在Activity的onServiceConnected()方法中,得到IBinder类型对象

    e. 将IBinder类型对象强转为MyBinder类型

  3. BroadcastReceiver(广播接收器)

    (1)广播:单项、群发,作为Android内部信息传输的机制。

    (2)广播接收器的创建:

    a. 创建一个类MyReceiver继承BroadcastReceiver;

    b. 重写onReceive()方法;

    c. 清单文件中注册

    android:name="包名.类名"

    (3)应用自己发送广播

    //创建Intent对象

    Intent intent = new Intent();

    //设置过滤条件

    intent.setAction("xxx");

    //发送广播

    sendBroadcast(intent);

    (4)接收广播

    a. 在清单文件中注册广播

    <intent-filter>

        <action android:name="xxx"/>

    </intent-filter>

    只要条件匹配,就能接收广播

    b. 在代码中注册广播

    //创建IntentFilter对象

    IntentFilter filter = new IntentFilter();

    //添加过滤条件

    filter.addAction("xxx");

    //创建MyReceiver对象

    MyReceiver receiver = new MyReceiver();

    //注册广播

    registerReceiver(filter,receiver);

    //注销广播

    unregisterReceiver(receiver);

  4. ContentProvider(数据共享)

    一个用来提供数据共享的组件,主要将一些特定的应用程序数据提供给其他应用程序使用,这些应用程序数据可以存储于文件系统或者SQLite数据库中。在Android程序中,共享数据的实现需要继承自ContentProvider基类,该基类为其他应用程序使用和存储数据实现了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个ContentResolver对象,并通过调用它的方法作为替代。ContentResolver对象提供了query、insert及update等方法,可以对共享数据执行各种操作。

    (1)ContentResolver(内容解析者)示例:读取系统联系人

    //创建ContentResolver对象

    ContentResolver resolver = getContentResolver();

    //使用query方法获取联系人信息

    Cusor cusor = resolver.query(Phones.CONTENT_URI, null, null, null, null);

    //遍历联系人信息

    while(cursor.moveToNext()){

    //根据字段名获取该字段的索引位置

    int nameIndex = cursor.getColumnIndex(Phones.NAME);

    int numberIndex = cursor.getColumnIndex(Phones.NUMBER);

    //根据索引获取联系人信息

    String name = cursor.getString(nameIndex);

    String number = cursor.getString(numberIndex);

    }

    //关闭cursor对象

    cursor.close();