热恋Android (3 -- Android项目结构)

本文介绍了Android项目的四大核心组件:Activity、BroadcastIntentReceiver、Service及ContentProvider,并解释了它们的作用及如何在AndroidManifest.xml中声明。

今天学习Android项目结构,了解一下Andorid项目有哪些部分构成。

一个Andorid项目可以包含(但不一定全部包含)下面部件: 

 

  •  Activity
  •  Broadcast Intent Receiver
  •  Service
  •  Content Provider
  •  

    在Andorid项目中,AndroidManifest.xml文件记录了该项目使用了哪些部件。下面是一个AndoidManifest.xml的例子:

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    3.         package="com.my_domain.app.helloactivity">
    4.         
    5.     <application android:label="@string/app_name">
    6.     
    7.         <activity android:name=".HelloActivity">
    8.             <intent-filter>
    9.                 <action android:name="android.intent.action.MAIN"/>
    10.                 <category android:name="android.intent.category.LAUNCHER"/>
    11.             </intent-filter>
    12.         </activity>
    13.         
    14.     </application>
    15.     
    16. </manifest>

     

    下面分别介绍一下这四个部件:

     

    1. Activity(场景)

    一个Activity通常是一个项目中的单一画面。每个Activity在编程时对应一个继承自android.app.Activity的JAVA类。该类表示一个包含视图(View)和行为(respond to events)的用户界面。大多数项目包含多个画面。但在同一时刻,只有一个当前画面供用户操作和查看。在程序运行过程中,随着一个新的Activity的开始,画面要进行切换。一个Activity可以返回一个值,以便下个Activity对该值进行处理。

    举个例子,假设有个通讯录程序,其中包括修改联系人信息的功能。这个功能的操作流程如下:

        Activity1: 用户在功能菜单选择修改联系人

        Activity2: 显示联系人列表,如果用户选择取消,回到Activity1; 如果用户从中选择了要修改的联系人,进入Activity3

        Activity3: 显示修改联系人画面,用户在该画面完成修改

        回到Activity2

    在这个过程中,Activity2会将选择的联系人作为返回值交给Actity3。在切换Activity时,每当打开一个新画面,上个画面会被Push到历史堆栈中,以便执行回退动作。比如上个例子中,Activity2中,可以回退到Activity1。可以从一个画面直接回退到之前访问的任何画面,比如当用户选择"Home",直接回退到主场景。

    在上面的XML代码中,<activity>元素中包含了一个 <intent-filter> 元素。这个intent-filter又是什么呢?Intent表示一个项目想要做什么,其中包括两个重要部分:action(行为)和基于行为的数据。一般的,Action: MAIN (程序入口),VIEW, PICK, EDIT, 等。所有的数据用URI表示。比如在联系人信息画面,你可以通过向该页面指定一个VIEW Action并且将表示联系人的URI和这个Action"关联"起来。这个"关联"关系,通过IntentFilter类来表示。这样,在<activity>元素中,包含一个<intent-filter>元素,并在其中完成Action及其数据的关联,就是这样,构成了一个完整的Activity。

    要完成不同画面的定向,就要靠Intent了。如果要定向到指定的Intent,就调用Activity对象的startActivity(myIntent)方法。当调用该方法时,系统会在所有的Intent-filter中查找最匹配的Intent,因为一个Activity关联了一个Intent,所以调用startActivity(myIntent)方法的结果就是从一个Activity切换到另一个Activity。当另一个Acitvity被激活时,它的startActivity()方法会被调用。

     

    2.Broadcast Intent Receiver

    使用BroadcastReceiver你可以在程序中感应系统广播Intent。BroadcastReceiver并不提供用户界面,只能通过NotificationManager通知用户某些事件发生了,比如电话铃响了,有新的可用数据连接等。BroadcastReceiver有两种注册方式:一种是通过 AndroidManifest.xml,另一种是通过Context.registerReceiver()进行注册。一个程序可以注册多个BroadcastReceiver。如果你需要的话,当某个程序注册的BroadcastReceiver被触发时,该程序可以自动启动,以处理BroadcastReceiver发出的事件。

    一个程序不但可以使用BroadcastReceiver接收广播Intent。而且可以向系统广播Intent。要向系统广播Intent,你只需调用Context.sendBroadcast()方法即可。

     

    3.Service

    一个Service是常驻系统的,没有UI(用户界面)的。举个例子,你可以在手机上一边听音乐,一边编辑短信,此时音乐播放器并没有显示界面,而是在后台运行。要实现这样的功能,就要用到Service了。当需要后台运行时,这个音乐播放器程序可以调用Context.startService()方法让程序继续在后台运行,直到程序运行完毕。

     

    4.Content Provider

    有的程序需要存储数据的地方,比如文件、SQLite数据库,或其他机制。Content Provider允许你的程序可以和其他程序共享数据。一个Content Provider实际上就是一个包含了可以供其他程序访问共享数据的方法的类。

     

    以上四类中,适用于不同的程序,也可以混合适用,以达到丰富的效果。当然,最常用的还是Activity。

Eclipse Milo 是一个开源的 OPC UA(OPC Unified Architecture)实现框架,广泛用于工业自动化领域。针对 **milo-sdk-client version 1.0.1** 的相关信息,包括下载、使用文档和更新日志,以下是详细的说明: ### 下载 Eclipse Milo 的 SDK 客户端通常托管在 Maven 中央仓库中,可以通过 Maven 或 Gradle 等依赖管理工具进行下载。对于 `milo-sdk-client` 版本 `1.0.1`,Maven 配置如下: ```xml <dependency> <groupId>org.eclipse.milo</groupId> <artifactId>sdk-client</artifactId> <version>1.0.1</version> </dependency> ``` 如果使用 Gradle,则配置为: ```groovy implementation &#39;org.eclipse.milo:sdk-client:1.0.1&#39; ``` 通过上述配置,可以自动从远程仓库下载对应版本的 JAR 文件及相关依赖。 ### 使用文档 Eclipse Milo 的官方文档是了解 `milo-sdk-client` 功能和使用方式的主要来源。虽然特定于 `1.0.1` 的独立文档可能不明显标注,但可以通过以下资源获取帮助[^3]: - **GitHub 官方仓库**:[https://github.com/eclipse/milo](https://github.com/eclipse/milo) 提供了完整的源代码及示例。 - **JavaDoc 文档**:每个版本的 SDK 都附带详细的 JavaDoc,可通过构建源码或访问在线资源获取。 - **社区与论坛**:Eclipse Milo 社区活跃,可以在 Gitter、Stack Overflow 或 Eclipse 论坛中查找相关问题和案例。 例如,连接到 OPC UA 服务器的基本代码片段如下: ```java import org.eclipse.milo.opcua.sdk.client.OpcUaClient; import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue; import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId; public class OpcUaExample { public static void main(String[] args) throws Exception { String endpointUrl = "opc.tcp://localhost:62541/milo"; OpcUaClient client = OpcUaClient.create(endpointUrl); client.connect().get(); NodeId nodeId = new NodeId(2, "MyVariable"); DataValue value = client.readValue(0, null, nodeId).get(); System.out.println("Read value: " + value.getValue()); client.disconnect().get(); } } ``` ### 更新日志 (Release Notes) Eclipse Milo 的更新日志通常在 GitHub 的发布页面上提供。`milo-sdk-client 1.0.1` 的更新内容主要包括修复已知问题、提升性能以及增强兼容性[^2]。具体改进可参考其 [GitHub Releases 页面](https://github.com/eclipse/milo/releases)。 ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值