Android基础知识

    xiaoxiao2025-05-06  12

    Android应用程序组件

    (转载 阿琉克斯.李 http://www.cnblogs.com/alexlee85/p/3280149.html)

    1、Activities

    一个Activity代表一个单独的拥有用户界面的屏幕。比如,一个邮件应用程序可能拥有一个显示新邮件的列表的Activity,一个编写邮件的Activity,一个读邮件的Activity。虽然这些Activity一起工作,但是他们是相互独立的。因此一个不同的应用程序也可以启动这些Activity中的任何一个(如果邮件应用程序允许的话)。比如一个摄像头应用程序为了能让用户分享一张图片它能启动邮件应用程序中的编写邮件的Activity。

    一个Activity是由Activity类的子类来实现的。

    2、Services

    一个Service组件是运行在后台的一个进程,这个进程处理一个长时间的操作或者是一个远程调用。一个Service不需要提供一个用户界面。比如,一个Service可以在用户运行一个不同程序的同时在后台播放音乐,或者在不阻塞一个Activity的用户界面的同时获取网络数据。其他的组件,比如一个Activity,可以启动一个Service并且与之交互。

    一个Service是由Service的子类来实现的。

    3、Content providers

    一个Content provider管理一组共享的应用程序数据。你可以把这些数据存储到文件系统、一SQLite数据库、互联网或者任何你的应用程序可以访问的持久化存储设备中。通过Content provider其他的应用程序能够查询甚至修改(如果Content provider允许修改操作)这些数据。例如Android系统提供了管理联系人信息的Content provider。因此,任何一个应用程序在拥有相应权限的情况下都可以访问这个Content provider管理的数据(比如ContactsContract.Data)来读取或者修改某个联系人的信息。

    Content provider用于管理应用程序不与其他程序共享的的私有数据也是非常有用的。不如Note Pad例子程序就使用了一个Content provider来存储数据。

    一个Content Provider是由ContentProvider的子类来实现的,并且必须实现一组使其他应用程序能与之通信的API。更多信息请参照Content Providers开发者指南。

    4、Broadcast receivers

    一个Broadcast receiver组件用于响应整个系统的广播通知。大量的广播都是由系统产生的。例如屏幕关闭的广播,电量不足的广播,拍了一张相片的广播。应用程序也可以发出广播,例如让其他应用程序知道一些数据已从网上下载了,并且它们可以使用这些数据。虽然broadcast receiver不显示用户界面,但是当广播事件发生的时候他们可以创建一个状态栏通知来提示用户。更加普遍的情况是,一个Broadcast receiver只是一扇通向其他组件的“大门”,它只做非常少量的工作。例如它可以基于一个广播事件启动一个Service来完成一些工作。

    启动组件

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

    你可以通过传递一个Intent对象到startActivity()或者startActivityForResult()(当你希望这个Activity返回结果时)方法来启动一个Activity。

    你可以通过传递一个Intent对象到startService()方法来启动一个Service(或者传递新的指令到正在运行的Service)。或者你可以通过传递一个Intent对象到bindService()来绑定到Service。

    你可以通过传递一个Intent对象到sendBroadcast(),sendOrderedBroadcast()或者sendStickyBroadcast()方法来发布一个广播。

    你可以通过调用ContentResolver对象上的query()方法来对一个Content provider执行查询操作。

    一个Broadcast receiver是由BroadcastReceiver的子类来实现的,并且每个广播都是当作一个Intent对象来传递的。

    Android的特点

    Android系统的一个独一无二的设计就是一个应用程序可以启动其它应用程序的组件。例如如果你希望用户通过摄像头来拍摄一张照片,而其他应用程序已经实现了这个功能,那么你的应用程序可以直接使用它,而不是自己开发一个Activity来实现这一功能。你不需要通过合并或者事件链接到摄像头应用程序的代码,而是直接启动摄像头应用程序实现拍照功能的Activity。当拍照完成时,照片功过事件返回到你的应用程序中。对于用户来说,看起来拍照功能就是你的应用程序的一部分。

    当系统启动一个组件的时候,它为应用程序开启一个进程(如果应用程序还没有运行),并且实例化这个组件需要的所有的类。例如,如果你的应用程序启动一个摄像头应用程序中实现拍照功能的Activity,这个Activity运行在属于摄像头应用程序的进程中,而不是你的应用程序的进程中。因此,和其它大多数操作系统不一样,Android应用程序不止一个单独的入口。(例如,没有main函数)

    因为每个应用程序运行在独立的进程中,并且每个进程都有文件权限来限制其它程序的访问,你的应用程序不能直接启动其它应用程序的组件。尽管如此,Android系统可以启动它们。因此,你必须传递一个消息给Android系统,这个消息定义了你想启动某个组件的意图,Android系统接收到这个消息后为你启动其他应用程序的组件。

    Standard Actions

    Standard Activity Actions

    * <p>These are the current standard actions that Intent defines for launching * activities (usually through {@link Context#startActivity}. The most * important, and by far most frequently used, are {@link #ACTION_MAIN} and * {@link #ACTION_EDIT}. * * <ul> * <li> {@link #ACTION_MAIN} * <li> {@link #ACTION_VIEW} * <li> {@link #ACTION_ATTACH_DATA} * <li> {@link #ACTION_EDIT} * <li> {@link #ACTION_PICK} * <li> {@link #ACTION_CHOOSER} * <li> {@link #ACTION_GET_CONTENT} * <li> {@link #ACTION_DIAL} * <li> {@link #ACTION_CALL} * <li> {@link #ACTION_SEND} * <li> {@link #ACTION_SENDTO} * <li> {@link #ACTION_ANSWER} * <li> {@link #ACTION_INSERT} * <li> {@link #ACTION_DELETE} * <li> {@link #ACTION_RUN} * <li> {@link #ACTION_SYNC} * <li> {@link #ACTION_PICK_ACTIVITY} * <li> {@link #ACTION_SEARCH} * <li> {@link #ACTION_WEB_SEARCH} * <li> {@link #ACTION_FACTORY_TEST} * </ul>

    Standard Broadcast Actions

    * <p>These are the current standard actions that Intent defines for receiving * broadcasts (usually through {@link Context#registerReceiver} or a * &lt;receiver&gt; tag in a manifest). * * <ul> * <li> {@link #ACTION_TIME_TICK} * <li> {@link #ACTION_TIME_CHANGED} * <li> {@link #ACTION_TIMEZONE_CHANGED} * <li> {@link #ACTION_BOOT_COMPLETED} * <li> {@link #ACTION_PACKAGE_ADDED} * <li> {@link #ACTION_PACKAGE_CHANGED} * <li> {@link #ACTION_PACKAGE_REMOVED} * <li> {@link #ACTION_PACKAGE_RESTARTED} * <li> {@link #ACTION_PACKAGE_DATA_CLEARED} * <li> {@link #ACTION_UID_REMOVED} * <li> {@link #ACTION_BATTERY_CHANGED} * <li> {@link #ACTION_POWER_CONNECTED} * <li> {@link #ACTION_POWER_DISCONNECTED} * <li> {@link #ACTION_SHUTDOWN} * </ul>

    Standard Categories

    * <p>These are the current standard categories that can be used to further * clarify an Intent via {@link #addCategory}. * * <ul> * <li> {@link #CATEGORY_DEFAULT} * <li> {@link #CATEGORY_BROWSABLE} * <li> {@link #CATEGORY_TAB} * <li> {@link #CATEGORY_ALTERNATIVE} * <li> {@link #CATEGORY_SELECTED_ALTERNATIVE} * <li> {@link #CATEGORY_LAUNCHER} * <li> {@link #CATEGORY_INFO} * <li> {@link #CATEGORY_HOME} * <li> {@link #CATEGORY_PREFERENCE} * <li> {@link #CATEGORY_TEST} * <li> {@link #CATEGORY_CAR_DOCK} * <li> {@link #CATEGORY_DESK_DOCK} * <li> {@link #CATEGORY_LE_DESK_DOCK} * <li> {@link #CATEGORY_HE_DESK_DOCK} * <li> {@link #CATEGORY_CAR_MODE} * <li> {@link #CATEGORY_APP_MARKET} * </ul>

    Standard Extra Data

    * <p>These are the current standard fields that can be used as extra data via * {@link #putExtra}. * * <ul> * <li> {@link #EXTRA_ALARM_COUNT} * <li> {@link #EXTRA_BCC} * <li> {@link #EXTRA_CC} * <li> {@link #EXTRA_CHANGED_COMPONENT_NAME} * <li> {@link #EXTRA_DATA_REMOVED} * <li> {@link #EXTRA_DOCK_STATE} * <li> {@link #EXTRA_DOCK_STATE_HE_DESK} * <li> {@link #EXTRA_DOCK_STATE_LE_DESK} * <li> {@link #EXTRA_DOCK_STATE_CAR} * <li> {@link #EXTRA_DOCK_STATE_DESK} * <li> {@link #EXTRA_DOCK_STATE_UNDOCKED} * <li> {@link #EXTRA_DONT_KILL_APP} * <li> {@link #EXTRA_EMAIL} * <li> {@link #EXTRA_INITIAL_INTENTS} * <li> {@link #EXTRA_INTENT} * <li> {@link #EXTRA_KEY_EVENT} * <li> {@link #EXTRA_ORIGINATING_URI} * <li> {@link #EXTRA_PHONE_NUMBER} * <li> {@link #EXTRA_REFERRER} * <li> {@link #EXTRA_REMOTE_INTENT_TOKEN} * <li> {@link #EXTRA_REPLACING} * <li> {@link #EXTRA_SHORTCUT_ICON} * <li> {@link #EXTRA_SHORTCUT_ICON_RESOURCE} * <li> {@link #EXTRA_SHORTCUT_INTENT} * <li> {@link #EXTRA_STREAM} * <li> {@link #EXTRA_SHORTCUT_NAME} * <li> {@link #EXTRA_SUBJECT} * <li> {@link #EXTRA_TEMPLATE} * <li> {@link #EXTRA_TEXT} * <li> {@link #EXTRA_TITLE} * <li> {@link #EXTRA_UID} * </ul>
    转载请注明原文地址: https://ju.6miu.com/read-1298812.html
    最新回复(0)