美文网首页Android
Android 四大组件

Android 四大组件

作者: lllllliudahong | 来源:发表于2019-03-20 16:45 被阅读0次

    注意:

    四大组件都需要在manifest文件中进行配置

    四大组件都需要在manifest文件中进行配置

    四大组件都需要在manifest文件中进行配置

    <activity>该标签为应用中用到的Activity组件
    <service>:该标签用来声明Service组件。
    <receiver>:该标签为Broadcast Receiver组件的声明标签,用来定义一个具体的广播接收器
    <provider>:该标签是Content Provider(内容提供者)的声明标签。主要属性有android:name,具体类名,android:authorities,对指定URL授予权限标识。

    1.Activity

    Activity 表示具有用户界面的单一屏幕。例如,电子邮件应用可能具有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。 尽管这些 Activity 通过协作在电子邮件应用中形成了一种紧密结合的用户体验,但每一个 Activity 都独立于其他 Activity 而存在。 因此,其他应用可以启动其中任何一个 Activity(如果电子邮件应用允许)。 例如,相机应用可以启动电子邮件应用内用于撰写新电子邮件的 Activity,以便用户共享图片。

    2.Service

    Service是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。 Service不提供用户界面。 例如,当用户位于其他应用中时,Service可能在后台播放音乐或者通过网络获取数据,但不会阻断用户与 Activity 的交互。 诸如 Activity 等其他组件可以启动Service,让其运行或与其绑定以便与其进行交互。

    3.BroadcastReceiver

    BroadcastReceiver是一种用于响应系统范围广播通知的组件。 许多广播都是由系统发起的 — 例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可以发起广播 — 例如,通知其他应用某些数据已下载至设备,并且可供其使用。 尽管广播接收器不会显示用户界面,但它们可以创建状态栏通知,在发生广播事件时提醒用户。 但广播接收器更常见的用途只是作为通向其他组件的“通道”,设计用于执行极少量的工作。 例如,它可能会基于事件发起一项服务来执行某项工作。

    4.ContentProvider

    ContentProvider管理一组共享的应用数据。您可以将数据存储在文件系统、SQLite 数据库、网络上或您的应用可以访问的任何其他永久性存储位置。 其他应用可以通过内容提供程序查询数据,甚至修改数据(如果内容提供程序允许)。 例如,Android 系统可提供管理用户联系人信息的内容提供程序。 因此,任何具有适当权限的应用都可以查询内容提供程序的某一部分(如 ContactsContract.Data),以读取和写入有关特定人员的信息。

    内容提供程序也适用于读取和写入您的应用不共享的私有数据。 例如,记事本示例应用使用内容提供程序来保存笔记。

    启动组件

    四种组件类型中的三种 — Activity、服务和广播接收器 — 通过名为 Intent 的异步消息进行启动。Intent 会在运行时将各个组件相互绑定(您可以将 Intent 视为从其他组件请求操作的信使),无论组件属于您的应用还是其他应用。

    Intent 使用 Intent 对象创建,它定义的消息用于启动特定组件或特定类型的组件 — Intent 可以是显式的,也可以是隐式的。

    每种类型的组件有不同的启动方法:

    • 您可以通过将 Intent 传递到 startActivity()或startActivityForResult()(当您想让 Activity 返回结果时)来启动 Activity(或为其安排新任务)。

    • 您可以通过将Intent传递到startService()来启动服务(或对执行中的服务下达新指令)。 或者,您也可以通过将 Inten传递到 bindService()来绑定到该服务。

    • 您可以通过将 Intent传递到sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast() 等方法来发起广播;

    • 您可以通过在 ContentResolver上调用 query()来对内容提供程序执行查询。

    Intent 和 Intent filter

    Intent 分为两种类型:

    • 显式 Intent:按名称(完全限定类名)指定要启动的组件。 通常,您会在自己的应用中使用显式 Intent 来启动组件,这是因为您知道要启动的 Activity 或服务的类名。例如,启动新 Activity 以响应用户操作,或者启动服务以在后台下载文件。
    // Executed in an Activity, so 'this' is the Context
    // The fileUrl is a string URL, such as "http://www.example.com/image.png"
    Intent downloadIntent = new Intent(this, DownloadService.class);
    downloadIntent.setData(Uri.parse(fileUrl));
    startService(downloadIntent);
    
    • 隐式 Intent :不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它。 例如,如果您希望用户与他人共享您的内容,请使用 ACTION_SEND 操作创建 Intent,并添加指定共享内容的 extra。 使用该 Intent 调用 startActivity() 时,用户可以选取共享内容所使用的应用。
    注意:用户可能没有任何应用处理您发送到 startActivity() 的隐式 Intent。如果出现这种情况,则调用将会失败,且应用会崩溃。要验证 Activity 是否会接收 Intent,请对 Intent 对象调用 resolveActivity()。如果结果为非空,则至少有一个应用能够处理该 Intent,且可以安全调用 startActivity()。 如果结果为空,则不应使用该 Intent。如有可能,您应停用发出该 Intent 的功能。
    // Create the text message with a string
    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
    sendIntent.setType("text/plain");
    
    // Verify that the intent will resolve to an activity
    if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
    }
    

    具体的用法可以参考Google文档:
    https://developer.android.google.cn/guide/components/intents-filters.html

    相关文章

      网友评论

        本文标题:Android 四大组件

        本文链接:https://www.haomeiwen.com/subject/nknzmqtx.html