Android四大组件的作用
1、Activity是一种展示型组件,是一种前台界面的角色,完成用户的交互。对用户来说,Activity就是Android应用的全部,因为其他三大组件对用户来说是不可感知的。
2、BroadcastReceiver是一种消息型组件,主要作用是消息的传递,该消息的传递可以在应用内,也可以在应用之间,它的角色是一个消息的传递者,它同样无法被用户所感知,因为它工作在系统内部。
3、 Service是一种计算型组件,用于在后台执行一系列计算任务。由于Service组件工作在后台,因此用户无法直接感知到它的存在。Activity组件只有一种运行模式,即Activity处于启动状态,但是Service组件却有两种状态:启动状态和绑定状态。Service组件处于启动状态时,它的内部可以执行一些后台计算,并且不需要和外界有直接的交互。Service处于绑定状态,Service内部同样也可以执行后台计算,但是处于这种状态的Service可以很方便地和外界进行通信。
4、ContentProvider是一种数据共享型组件,主要作用是作为一个平台,提供数据的共享,并且提供数据的增/删/改/查功能,主要应用于应用之间的数据共享场景。同样的,它也无法被用户所感知。
为什么需要内容提供者
⚫ 为了跨程序访问数据。试想如果在 ✎ App1中创建了一个私有数据库,App2是不能直接访问的。因为权限不够,虽然可以使用命令修改权限,然后使用SQLiteDatabase.openDatabase的静态方法,填上具体的路径和模式来访问。但这并不推荐,有没有更好的办法?官方推荐使用ContentProvider–内容提供者。
⚫ 内容提供者组件通过请求从一个应用程序向其他的应用程序提供数据。这些请求由类 ContentResolver的方法来处理。
⚫ 内容提供者可以让内容集中,必要时可以有多个不同的应用程序来访问。内容提供者被实现为类 ContentProvider 类的子类。需要实现一系列标准的 API,以便其他的应用程序来执行事务。内容提供者的行为和数据库很像。你可以查询,编辑它的内容,使用 insert(), update(), delete() 和 query() 来添加或者删除内容。多数情况下数据被存储在SQLite 数据库,也可以是文件,甚至是网络。
内容提供者简介
内容提供者(ContentProvider)是A**ndroid系统四大组件之一,它是不同应用程序之间进行数据共享的标准API,通ContentResolver类可以访问ContentProvider中共享的数据。
– ContentProvider的工作原理如下:
– ContentResolver提供一系列增删改查的方法对数据进行操作,并且这些方法以Uri的形式对外提供数据。
– Uri为内容提供者中的数据建立了唯一标识符。它主要由三部分
组成:scheme、authorities和path。
内容提供者的创建
内容提供者对应的java文件
package com.example.readsms;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
public class MyContentProvider extends ContentProvider {
public MyContentProvider() {
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// Implement this to handle requests to delete one or more rows.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public String getType(Uri uri) {
// TODO: Implement this to handle requests for the MIME type of the data
// at the given URI.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO: Implement this to handle requests to insert a new row.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public boolean onCreate() {
// TODO: Implement this to initialize your content provider on startup.
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO: Implement this to handle query requests from clients.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO: Implement this to handle requests to update one or more rows.
throw new UnsupportedOperationException("Not yet implemented");
}
}