【磨叽教程】Android进阶教程之Activity简介

Activity是Android应用的关键组件,我们所见到的很多Android应用都是通过Activity的各种组合而成的。在大多数编程中,都是通过main()方法来启动应用程序的,但是在Android应用中则不然,它是通过调用与其生命周期特定阶段相对应的回调方法来运行Activity实例中的代码。

所以我们本文来介绍Activity的概念,并简要说明如何使用Activity。

Activity的概念
其实移动应用和PC应用的最大区别主要还是在体验上,桌面应用你每次启动后都会先进入该PC应用的首页,而移动应用则不一定了。例如:你直接通过手机桌面启动今日头条APP,那你进去的就是这个APP的主页,但是你通过通知栏进去的话,现实的就是某条新闻的详情页。

Activity存在的目的就是促进并推动这种模式的发展,当一个应用调用另一个应用时,调用方APP会调用另一个APP的某一个Activity,而不是整个APP。通过这种方式,Activity充当了APP与用户互动的入口点。

Activity提供了一个窗口供开发者在其中绘制界面,通常此窗口是会充满整个屏幕的,但在特定情况下可能会比屏幕小,也有可能是浮动在其他窗口上面,通常一个Activity实现一个界面,而一个APP是由多个界面组成的

大多数APP包含多个界面,那么也就意味着它包含了多个Activity。一个APP不管有多少个Activity组成,但它只能有一个主Activity。也就是用户启动后看到的第一个界面。然后可以再通过各种activity之间的启动调用来组合起来形成一个完成的APP应用。比如我们经常使用的微信,在你打开的时候,一般是在消息界面,但是你可以通过下面的菜单后菜单中的菜单进入朋友圈、附近的人、漂流瓶等等功能中去。

虽然应用中的各个 Activity 协同工作形成统一的用户体验,但每个 Activity 与其他 Activity 之间只存在松散的关联,应用内不同 Activity 之间的依赖关系通常很小。这对于我们开发者来说叫解耦,解耦度越高能实现的功能就越多,可扩展性就越好。事实确实如此,Activity 经常会启动属于其他应用的 Activity。例如,浏览器应用可能会启动社交媒体应用的“分享”Activity。

配置清单

要使应用能够使用 Activity,您必须在清单中声明 Activity 及其特定属性。如果只是创建了新Activity代码而没有在清单文件中声明,那么在你启动该Activity的时候就会引起APP崩溃。

要声明 Activity,请打开清单文件,并添加 <activity>元素作为 元素的子元素。例如:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

此元素唯一的必要属性是 android:name,该属性用于指定 Activity 的类名称。

声明 intent 过滤器

Intent 过滤器是 Android 平台的一项非常强大的功能。借助这项功能,您不但可以根据显式请求启动 Activity,还可以根据隐式请求启动 Activity。显式请求就是直接告诉系统你要启动的Activity就行了,而隐式请求就是系统发现有多个满足要求的Activity,然后会让用户去选择使用哪一个。例如,你使用微信给好友发一个链接,他点击这个链接的时候,如果你手机上有多个浏览器的话,系统就会询问你打算使用哪个浏览器去访问这个链接,这就是 intent 过滤器在起作用。

要使用此功能,您需要在 <activity> 元素中声明 <intent-filter> 属性。此元素的定义包括 <action> 元素,以及可选的 <category> 元素和<data> 元素。这些元素组合在一起,可以指定 Activity 能够响应的 intent 类型。例如,以下代码段展示了如何配置一个发送文本数据并接收其他 Activity 的文本数据发送请求的 Activity:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>
在此示例中

<action> 元素指定该 Activity 会发送数据。将 <category> 元素声明为 DEFAULT 可使 Activity 能够接收启动请求。<data> 元素指定此 Activity 可以发送的数据类型。以下代码段展示了如何调用上述 Activity:

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);

如果您打算构建一个独立的应用,不允许其他应用激活其 Activity,则不需要任何其他 intent 过滤器。您不想让其他应用访问的 Activity 不应包含 intent 过滤器,您可以自己使用显式 intent 启动它们。

声明权限

您可以使用清单的 <activity> 标记来控制哪些应用可以启动某个 Activity。启动APP和被启动APP 必须在其清单中具有相同的权限,前者才能启动后者。如果您为启动APP 声明了 <uses-permission> 元素,则所有需要启动该APP的APP都必须具有匹配的 <uses-permission>元素。

例如,假设您的应用想要使用一个名为 SocialApp 的应用在社交媒体上分享文章,则 SocialApp 本身必须定义调用它的应用所需具备的权限:

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

然后,为了能够调用 SocialApp,您的应用必须匹配 SocialApp 清单中设置的权限:

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值