配置清单
声明Activity
<manifest ... >
<application ... >
<activity android:name=".ExampleActivity" />
...
</application ... >
...
</manifest >
声明intent过滤器
Intent过滤器是Android平台的一项非常强大的功能。借助这项功能,您不但可以根据显式请求启动Activity,还可以根据隐式请求启动Activity。例如,显示请求可能会告诉系统“在Gmail应用中启动”发送电子邮件‘Activity’,而隐式请求可能会告诉系统“在任何能够完成此工作的Activity中启动”发送电子邮件‘屏幕’。房系统界面询问用户使用哪个应用来执行任务时,这就是intent过滤器在起作用。
要使用此功能,您需要在元素中声明属性。此元素的定义包括元素,以及可选的元素和元素。这些元素祝贺在一起,可以指定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>
在此示例中,元素指定该Activity会发送数据。将元素声明为DEFAULT可使Activity能够接收启动请求。元素指定此Activity可以发送的数据类型。以下代码展示了如何用上述Activity:
// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT,textMessage);
// Start the activity
startActivity(sendIntent);
如果您打算构建一个独立的应用,不允许其他应用激活其Activity,则不需要任何其它intent过滤器。您不想让其它应用访问的Activity不应包含intent过滤器,您可以自己使用显式intent启动它们。
声明权限
您可以使用清单的标记来控制哪些因可以启动某个Activity,父Activity和子Activity必须在其清单中具有相同的权限,前者才能启动后者。如果您为父Activity声明了元素,则每个子Activity都必须具有匹配的元素。
例如,假设您的应用想要使用一个名为SocialApp的应用在社交媒体上分享文章,则SocialApp的应用在社交媒体上分享文章,则SocialApp本身必须定义调用t它的应用所需具备的权限:
<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>
管理Activity声明周期
一个Activity在其生命周期中会经历多种状态。您可以使用一系列回调来处理状态之间的转换。下面介绍这些回调:
onCreate()
您必须实现此回调,它会在系统创建您的Activity时触发。您的实现应该初始化Activity的基本组件:例如,您的应用应该在此处创建视图并将数据绑定到列表。最重要的,您必须在此处调用setContentView()来定义Activity界面的布局。
onCreate()完成后,下一个回调将是onStart()。
onStart
onCreate退出后,Activityj将进入“已启动”状态,并对用户可见。此回调包含Activity进入前台与用户进行互动之前的最后准备工作。
onResume()
系统会在Activity开始于用户互动之前调用此回调。此时,该Activity位于Activity堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在onResume()方法中实现的。
onResume()回调后面总是跟着onPause()回调。
onPause()
当Activity失去焦点并进入“已暂停”状态时,系统就会调用onPause()。例如,当用户点按“返回“或“最近使用的应用”按钮时,就会出现此状态。当系统为您的Activity调用onPause()时,从技术上来说,这意味着您的Activity仍然部分可见,但大多数情况下,这表明用户正离开该Activity,该Activity很快将进入“已停止”或“已恢复”状态。
如果用户希望界面继续更新,则处于“已暂停”状态的Activity也可以继续更新界面。例如,显示导航地图屏幕或播放媒体播放器的Activity就属于此类Activity。即使此类Activity失去了焦点,用户仍希望其界面继续更新。
您不应该使用onPause()来保存应用或用户数据、进行网络呼叫或执行数据库事务。
onPause()执行完毕后,下一个回调为onStop()或onResume(),具体取决于Activity进入“已暂停”状态后发生的情况。
onStop()
当Activity对用户不再可见时,系统会调用onStop()。出现这种情况的原因可能是Activity被销毁,新的Activity启动,或者现有的Activity正在进入“已恢复”状态并覆盖了已停止的Activity。在所有这些情况下,停止的Activity都将不再可见。
系统调用的下一个回调将是onRestart()(如果Activity重新与用户互动)或者onDestory()(如果Activity彻底停止)。
onRestart()
当处于“已停止”状态的Activity即将重启时,系统就会调用此回调。onRestart()会从Activity停止时的状态恢复Activity。
此回调后面总是跟着onStart()。
**onDestory()**当处于“已停止”状态的Activity即将重启时,系统就会调用此回调。onReStart()会从Activity停止时的状态恢复Activity。