当前位置:首页 » 安卓系统 » android的内容提供者

android的内容提供者

发布时间: 2022-12-29 03:17:37

‘壹’ Android 一一 简述Android四大组件

应用程序中,一个Activity就相当于手机屏幕,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序可以包含许多活动,比如事件的点击,一般都会触发一个新的Activity。

应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

内容提供者主要用于在不同应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。只有需要在多个应用程序间共享数据时才需要内容提供者。例如:通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。

是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要长期运行的任务(一边打电话,后台挂着QQ)。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另一个应用程序,服务扔然能够保持正常运行,不过服务并不是运行在一个独立的进程当中,而是依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉后,所有依赖于该进程的服务也会停止运行(正在听音乐,然后把音乐程序退出)。

‘贰’ Android Activity启动模式与状态保存及恢复详解

       Activity是 Android组件 中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之一 。
       Activity是一个应用程序 组件 ,提供一个 屏幕 ,用户可以用来交互为了完成某项任务。
       Activity中所有操作都与用户密切相关,是一个负责与 用户交互 的组件,可以通过setContentView(View)来 显示指定控件
       在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。
       关于Activity启动流程请参考之前的文章 Android activity启动流程分析

       activity有四种启动模式,分别为standard,singleTop,singleTask,singleInstance。如果要使用这四种启动模式,必须在manifest文件中<activity>标签中的launchMode属性中配置。

       标准的默认启动模式,这种模式下activity可以被多次实例化,即在一个task中可以存在多个activity,每一个activity会处理一个intent对象,(在A中再次启动A,会存在后面的A在前面的A上面,当前task会存在两个activity的实例对象)

       如果一个singleTop模式启动的activity实例已经存在于栈顶,那么再次启动这个activity的时候,不会重新创建实例,而是重用位于栈顶的那个实例,并且会调用实例的onNewIntent()方法将Intent对象传递到这个实例中,如果实例不位于栈顶,会创建新的实例。

       启动模式设置为singleTask,framework在启动该activity时只会把它标示为可在一个新任务中启动,至于是否在一个新任务中启动,还要受其他条件的限制,即taskAffinity属性。
        taskAffinity :默认情况下,一个应用中的所有activity具有相同的taskAffinity,即应用程序的包名。我们可以通过设置不同的taskAffinity属性给应用中的activity分组,也可以把不同的应用中的activity的taskAffinity设置成相同的值,当两个不同应用中的activity设置成相同的taskAffinity时,则两个activity会属于同一个TaskRecord。
       在启动一个singleTask的Activity实例时,如果系统中已经存在这样一个实例,就会将这个实例调度到任务栈的栈顶,并清除它当前所在任务中位于它上面的所有的activity;如果这个已存在的任务中不存在一个要启动的Activity的实例,则在这个任务的顶端启动一个实例;若这个任务不存在,则会启动一个新的任务,在这个新的任务中启动这个singleTask模式的Activity的一个实例。

       以singleInstance模式启动的Activity具有全局唯一性,即整个系统中只会存在一个这样的实例,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。
       以singleInstance模式启动的Activity具有独占性,即它会独自占用一个任务,被他开启的任何activity都会运行在其他任务中(官方文档上的描述为,singleInstance模式的Activity不允许其他Activity和它共存在一个任务中)。
       被singleInstance模式的Activity开启的其他activity,能够开启一个新任务,但不一定开启新的任务,也可能在已有的一个任务中开启,受条件的限制,这个条件是:当前系统中是不是已经有了一个activity B的taskAffinity属性指定的任务。

       涉及到Activity启动,就不得不说一下Activity的管理,Activity是以什么方式及被什么类来进行管理的,涉及的类主要如下:

       历史栈中的一个条目,代表一个activity。ActivityRecord中的成员变量task表示其所在的TaskRecord,ActivityRecord与TaskRecord建立了联系。

       内部维护一个 ArrayList<ActivityRecord> 用来保存ActivityRecord,TaskRecord中的mStack表示其所在的ActivityStack,TaskRecord与ActivityStack建立了联系。

       内部维护了一个 ArrayList<TaskRecord> ,用来管理TaskRecord,ActivityStack中持有ActivityStackSupervisor对象,由ActivityStackSupervisor创建。

       负责所有ActivityStack的管理。内部管理了mHomeStack、mFocusedStack和mLastFocusedStack三个Activity栈。其中,mHomeStack管理的是Launcher相关的Activity栈;mFocusedStack管理的是当前显示在前台Activity的Activity栈;mLastFocusedStack管理的是上一次显示在前台Activity的Activity栈。

       ActivityThread 运行在UI线程(主线程),App的真正入口。

       用来实现AMS和ActivityThread之间的交互。

       负责调用Activity和Application生命周期。

       当一个Activity未被主动关闭,即“被动关闭”时,可能需要系统给用户提供保持一些状态的入口。

       前面说的入口就是:Activity提供了onSaveInstanceState()方法,该方法是Activity在关闭前保存状态的核心方法。

       前面提到“被动关闭”,如果是主动关闭那么就不会调用,比如:按back键、调用finish()等,那么"被动关闭"的场景有哪些呢?下面给列举一下:

       肯定在调用onStop()前被调用,但不保证在onPause()前 / 后,一般是在onPause()后调用。

       当需要保持状态时,在onSaveInstanceState()内执行以下逻辑:

       当需要恢复时,在onCreate()内部执行以下逻辑:

       布局每个View默认实现:onSaveInstanceState(),即UI的任何改变都会自动的存储和在activity重新创建的时候自动的恢复(只有在为该UI提供了唯一ID后才起作用);
       若需复写该方法从而存储额外的状态信息时,应先调用父类的onSaveInstanceState()(因为默认的onSaveInstanceState()帮助UI存储它的状态);
       只使用该方法记录Activity的瞬间状态(UI的状态),而不是去存储持久化数据,因为onSaveInstanceState()调用时机不确定性;可使用 onPause()[一定会执行]存储持久化数据;

       Activity提供了onRestoreInstanceState()方法,该方法是Activity在重新创建后恢复之前保存状态的核心方法。

       若被动关闭了Activity,即调用了onSaveInstanceState(),那么下次启动时会调用onRestoreInstanceState()。

       onCreate()--->onStart()--->onRestoreInstanceState()--->onResume()

        注意: onSaveInstanceState()、onRestoreInstanceState()不一定 成对被调用
       如:当正在显示Activity A时,用户按下HOME键回到主界面,然后用户紧接着又返回到Activity A,此时Activity A一般不会因为内存的原因被系统销毁,故Activity A的onRestoreInstanceState()不会被执行;
       针对以上情况,onSaveInstanceState保持的参数可以选择在onCreate()内部进行解析使用,因为onSaveInstanceState的bundle参数会传递到onCreate方法中,可选择在onCreate()中做数据还原。
        至此:Activity的启动模式及Activity的状态保持及恢复介绍完毕。

‘叁’ 什么是android的四大组件

Android四大组件有Activity,Service服务,Content Provider内容提供,BroadcastReceiver广播接收器。

Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest绑定在一起。在manifest中,描述了每一个组件以及组件的作用,其中有6个组件,它们是Android应用程序的基石

(3)android的内容提供者扩展阅读

Activities(活动)

应用程序的显示层。每一个画面对应于你的应用程序,将会是Activity类的扩展。Activity使用Views去构建UI来显示信息和响应用户的行为。就桌面开发而言,一个Activity相当于一张Form。

Services(服务)

Android应用程序中不可见的“工人”。 Service组件运行时不可见,但它负责更新的数据源和可见的Activity,以及触发通知。它们常用来执行一些需要持续运行的处理,当你的 Activity已经不处于激活状态或不可见。

Content(内容)

提供共享的数据存储。Content Provider(内容提供器)用来管理和共享应用程序的数据库。在应用程序间,Content Provider是共享数据的首选方式。

Broadcast Receivers(广播接收器)

Intent广播的“消费者”。通过创建和注册一个Broadcast Receiver,应用程序可以监听符合特定条件的广播的Intent。Broadcast Receiver 会自动的启动你的Android应用程序去响应新来的Intent。Broadcast Receiver是事件驱动程序的理想手段。

参考资料来源:网络-Android组件

‘肆’ android数据存储与访问的方式都有哪些

数据存储与访问
很多时候我们的软件需要对处理后的数据进行存储或再次访问。Android为数据存储提供了多种方式,分别有如下几种:
文件
SharedPreferences
SQLite数据库
内容提供者(Content provider)
网络

使用文件进行数据存储
首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
复制代码 代码如下:

public class FileActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
...
FileOutputStream outStream = this.openFileOutput("csdnt.txt", Context.MODE_PRIVATE);
outStream.write("CSDN".getBytes());
outStream.close();
}
}

openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录,如: /data/data/cn.csdn.action/files/csdn.txt ,通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。
openFileOutput()方法的第二参数用于指定操作模式,有四种模式,分别为: Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入:
openFileOutput("csdn.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),其他程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。

读取文件内容
如果要打开存放在/data/data/<package name>/files目录应用私有的文件,可以使用Activity提供openFileInput()方法。
FileInputStream inStream = this.getContext().openFileInput("csdn.txt");
Log.i("FileTest", readInStream(inStream));
readInStream()的方法请看本页下面备注。

或者直接使用文件的绝对路径:
File file = new File("/data/data/cn.csdn.action/files/csdn.txt");
FileInputStream inStream = new FileInputStream(file);
Log.i("FileTest", readInStream(inStream));
注意:上面文件路径中的“cn.csdn.action”为应用所在包,当你在编写代码时应替换为你自己应用使用的包。
对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。

Activity还提供了getCacheDir()和getFilesDir()方法:
getCacheDir()方法用于获取/data/data/<package name>/cache目录
getFilesDir()方法用于获取/data/data/<package name>/files目录

‘伍’ 到底Android核心应用是什么

核心应用是系统运行的支持软件,如果意外停止,您可以重启手机。
Android应用程序没有唯一的启动入口(如C语言中的main()函数入口),一个Android应用程序是由多个不同的组件组合而成,组件之间通过Intent来实现通信。
Android系统的基本组件包括Activity,Service, BroadcastReceiver和ContentProvider等,此外还包括专门负责在基本组件之间传递消息的Intent组件。所有组件都必须在AndroidManifest.xml文件中声明。

一、Activity —— 应用表示层( 基类 Activity )
一个活动表示一个可视化的用户界面,关注一个用户从事的事件。例如,一个活动可能表示一个用户可选择的菜单项列表,或者可能显示照片连同它的标题。一个文本短信应用程序可能有一个活动,显示联系人的名单发送信息;第二个活动,写信息给选定的联系人;其他活动,重新查看旧信息或更改设置。虽然他们一起工作形成一个整体的用户界面,但是每个活动是独立于其他活动的。每一个都是作为Activity基类的一个子类的实现。
应用程序中的每个屏幕都是通过继承和扩展基类 Activity 来实现的。
同一应用中的每个 Activity 是相互独立的。程序启动后显示的第一幅画面是应用程序的第一个 Activity (默认窗口),而后可以根据需要从这个 Activity 启动另一个新的 Activity 。
Activity 利用 View 来实现应用中的 GUI (用户直接通过 GUI 和应用程序做交互)。 Activity 窗口内的可见内容通过基类 View 提供。使用 Activity.setContentView() 方法设置当前 Activity 中的 View 对象。
二、Service —— 没有可见的用户界面,但能够长时间运行于后台( 基类 Service )
一个服务没有一个可视化用户界面,而是在后台无期限地运行。例如一个服务可能是播放背景音乐而用户做其他一些事情,或者它可能从网络扩取数据,或计算一些东西并提供结果给需要的活动(activities)。每个服务都继承自Service基类。
运行于应用程序进程的主线程中,因此 Service 不会阻塞其他组件和用户界面。
Service 是不能自己启动的,必须通过 Context 对象(如一个 Activity )调用 startService 或 bindService 方法来启动(用这两种方法启动的 Service 的生命周期不同)。
三、Broadcast Receiver —— 用户接收广播通知的组件( 基类 BroadcastReceiver )

一个广播接收者是这样一个组件,它不做什么事,仅是接受广播公告并作出相应的反应。许多广播源自于系统代码,例如公告时区的改变、电池电量低、已采取图片、用户改变了语言偏好。应用程序也可以发起广播,例如为了他其他程序知道某些数据已经下载到设备且他们可以使用这些数据。一个应用程序可以有任意数量的广播接收者去反应任何它认为重要的公告。所有的接受者继承自BroadcastReceiver基类。
Android 中的广播要么来自于系统,要么来自普通应用程序。
很多事件都可能导致系统广播,如手机所在时区发生变化,电池电量低,用户改变系统语言设置等。
四、Content Provider 为解决应用程序间数据通信、共享的问题(基类 ContentProvider )
内容提供者(content provider)使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式。内容提供者继承自ContentProvider 基类并实现了一个标准的方法集,使得其他应用程序可以检索和存储数据。然而,应用程序并不直接调用这些方法。相反,替代的是它们使用一个ContentResolver对象并调用它的方法。ContentResolver能与任何内容提供者通信,它与提供者合作来管理参与进来的进程间的通信。
在 Android 中,每个应用程序都是用自己的用户 ID 并在自己的进程中运行。这样的好处是,可以有效地保护系统及应用程序,避免被其他不正常德应用程序所影响,每个进程都拥有独立的进程地址空间和虚拟空间。
一旦需要以上 4 种 Android 应用程序基本组件完成请求, Android 会首先确认该组件所在进程是否运行,如果没有运行, Android 将先启动进程,同时确认被请求组件的实例是否存在,否则将创建一个新的组件实例。
五、Intent —— 连接组件的纽带
以上 4 种基本组件中,除了 Content Provider 是通过 Content Resolver 激活外,其他 3 种组件 Activity 、 Service 和 Broadcast Receiver 都是由 Intent 异步消息激活的。

‘陆’ Android的四大组件是哪些,它们的作用

Android四大组件分别为activity、service、content provider、broadcast receiver。
一、android四大组件详解
1、activity
(1)一个Activity通常就是一个单独的屏幕(窗口)。
(2)Activity之间通过Intent进行通信。
(3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。
2、service
(1)service用于在后台完成用户指定的操作。service分为两种:
(a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。
(b)bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。
(2)startService()与bindService()区别:
(a)started service(启动服务)是由其他组件调用startService()方法启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。
(b)使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。
(3)开发人员需要在应用程序配置文件中声明全部的service,使用标签。
(4)Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。
3、content provider
(1)android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。
(2)只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。
(3)ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。
(4)开发人员不会直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作。
(5)ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。
4、broadcast receiver
(1)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。
(3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在

‘柒’ android四大组件的作用

Android 开发的四大组件分别是:活动(activity),用于表现功能;服务(service),后台运行服务,不提供界面呈现;广播接受者(Broadcast Receive),勇于接收广播;内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库。

  1. 活动

Android中,activity是所有程序的根本,所有程序的流程都运行在activity之中,activity可以算是开发者遇到的最频繁,也是android当中最基本的模块之一。在android的程序中,activity一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么activity就相当于一个网页。在activity当中可以添加一些Button、Checkbox等控件,可以看到activity概念和网页的概念相当类似。

一般一个android应用是由多个activity组成的,这多个activity之间可以进行相互跳转。例如,按下一个Button按钮后,可能会跳转到其他的activity,与网页跳转稍微有点不一样的是,activity之间的跳转有可能返回值。例如,从activity A跳转到activity B,那么当activity B运行结束时,有可能会给activity A一个返回值。这样做在很多时候是相当方便的。

当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。可以选择性的一处一些没有必要保留的屏幕,因为Android会把每个应用的开始到当前的每个屏幕保存在堆栈中。

Android 开发的四大组件分别是:活动(activity),用于表现功能;服务(service),后台运行服务,不提供界面呈现;广播接受者(Broadcast Receive),勇于接收广播;内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库。

2.服务

Service是android系统中的一种组件,跟activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service是没有界面长生命周期的代码。Service是一种程序,可以运行很长时间的,但是却没有用户界面。这么说有点枯燥,来看个例子。打开一个音乐播放器的程序,这时如果想上网,那么打开Android浏览器,这时虽然已经进入浏览器这个程序,但是歌曲播放并没有停止,而是在后台继续一首接一首的播放,其实这个播放就是由播放音乐的Service进行控制。当然这个播放音乐的Service也可以停止。例如,当播放列表里的歌曲都结束,或用户按下了停止音乐播放的快捷键等。Service可以在很多场合的应用中使用,如播放多媒体时用户启动了其他Activity,这时程序要在后台继续播放,比如检测SD卡上文件的变化,或在后台记录地理信息位置的改变等,而服务却藏在后台。

开启Service有两种方式:

(1)Context.starService():Service会经历onCreat ——>onStar(如果Service还没有运行,则Android先调用onCreat(),然后调用onStar(),所以一个Service的onStar方能会重复调用多次);如果是调用者自己直接退出而没有调用StopService,服务会一直在后台运行。该服务的调用者再启动起来后可以通过stopService关闭服务。注意,多次调用Context.starService()不会被嵌套(即使会有相应的onStar()方法被调用),所以无论同一个服务被启动多少次,一旦调用Context.stopService()或者StopSelf(),都会被停止。

说明:传递给starService()的Intent对象会传递给onStar()方法。调用顺序为onCreat——onStar(可调用多次)——onDestroy.

(2)Context.bindService():服务会经历onCreate()——onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到服务运行的状态或其他操作。这个时候把调用者(Context,如Activity)会和服务绑定在一起,Context退出了,服务就会调用onUnbind——onDestroy相应退出,所谓绑定在一起就是“共存亡”了。

3.广播接收器

在Android中,广播是一种广泛运用的在应用程序之间传输信息的机制。而广播接收器是对发送出来的广播进行过滤接受并响应的一类组件。可以使用广播接收器来让应用对一个外部时间做出响应。例如,当电话呼入这个外部事件到来时,可以利用广播接收器进行处理。当下载一个程序成功完成时,仍然可以利用广播接收器进行处理。广播接收器不NotificationManager来通知用户这些事情发生了。广播接收器既可以在AndroidManifest.xml中注册,也可以在运行时的代码中使用Context.registerReceive()进行注册。只要是注册了,当事件来临时,即使程序没有启动,系统也在需要的时候启动程序。各种应用还可以通过使用Context.sendBroadcast()将它们自己的Intent广播给其他应用程序。

4.内容提供者

内容提供者(Content Provider)是Android提供的第三方应用数据的访问方案。

在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许其他直接访问的。Android当然不会真的把每一个应用都做成一座“孤岛”,它为所有应用都准备可一扇窗,这就是Content Provider。应用想对外提供的数据,可以通过派生Content Provider类,封装成一枚Content Provider。每个Content Provider都用一个uri作为独立的标识,形如:content://com.xxxxx。所有应用看着像REST的样子,但实际上它比REST更为灵活。和REST类似,uri也可以有两种类型,一种是带id的;另一种是列表的,但实现者不需要按照这个模式来做,给id的uri也可以返回列表类型的数据。

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:625
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:355
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:70
php微信接口教程 发布:2025-04-16 17:07:30 浏览:295
android实现阴影 发布:2025-04-16 16:50:08 浏览:786
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:336
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:201
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:797
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:354
土压缩的本质 发布:2025-04-16 16:13:21 浏览:581