Android开发:Intent、活动启动与资源使用全解析
立即解锁
发布时间: 2025-08-24 00:47:48 阅读量: 1 订阅数: 4 

### Android开发:Intent、活动启动与资源使用全解析
#### 一、BroadcastReceiver的使用限制与注意事项
BroadcastReceiver在处理回调相关操作时存在一定限制,它不能绑定服务,也无法直接打开对话框。不过,若将其实现在一些长生命周期的组件(如Activity或Service)中,它的生命周期会和宿主组件保持一致,直到宿主组件被冻结。
需要注意的是,这种情况下不能通过AndroidManifest.xml来声明接收器,而是要在Activity的onResume()回调中调用registerReceiver()来表明对某个意图的关注,在Activity的onPause()中调用unregisterReceiver()来取消关注。
使用Intent对象传递任意消息时,只有在接收器处于活跃状态时才能正常工作。因此,若要将Intent框架作为任意消息总线,需满足以下几种情况:
1. 接收器不介意错过消息。
2. 提供一种机制让接收器能获取它在非活跃状态时错过的消息。
3. 接收器在清单文件中注册。
#### 二、启动活动和子活动
Android的UI架构理念是将应用分解为不同的活动。启动活动可分为两种场景:
1. 明确要启动的活动,通常是自己应用中的其他活动。
2. 有一个内容Uri,但不清楚具体的操作选项。
在决定启动活动时,需要考虑当前活动是否需要知道被启动活动的结束状态。例如,在获取认证信息时,主活动需要知道认证何时完成;而在查看邮件附件时,主活动通常不需要知道用户何时查看完毕。
##### 1. 启动活动的步骤
启动活动主要有两个关键步骤:创建意图和选择启动方式。
- **创建意图**
- 若要启动自己应用的活动,可创建显式意图,例如:
```java
new Intent(this, HelpActivity.class);
```
- 也可以为某个Uri创建意图并请求特定操作,示例如下:
```java
Uri uri = Uri.parse("geo:" + lat.toString() + "," + lon.toString());
Intent i = new Intent(Intent.ACTION_VIEW, uri);
```
- **启动活动**
- 调用startActivity():这是最简单的方式,会让Android找到最匹配的活动并传递意图,但当前活动不会收到子活动完成的通知。
- 调用startActivityForResult():传递意图和一个唯一的数字,当前活动会通过onActivityResult()回调收到子活动完成的通知,同时还能获取结果代码、可选的结果数据字符串和可选的额外信息Bundle。
以下是一个启动地图活动的示例代码:
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="1,2"
>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="2dip"
android:paddingRight="4dip"
android:text="Location:"
/>
<EditText android:id="@+id/lat"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="true"
android:editable="true"
android:singleLine="true"
android:layout_weight="1"
/>
<EditText android:id="@+id/lon"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="true"
android:editable="true"
android:singleLine="true"
android:layout_weight="1"
/>
</TableRow>
</TableLayout>
<Button android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Show Me!"
android:onClick="showMe"
/>
</LinearLayout>
```
```java
package com.commonsware.android.activities;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class LaunchDemo extends Activity {
private EditText lat;
private EditText lon;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
lat = (EditText) findViewById(R.id.lat);
lon = (EditText) findViewById(R.id.lon);
}
public void showMe(View v) {
String _lat = lat.getText().toString();
String _lon = lon.getText().toString();
Uri uri = Uri.parse("geo:" + _lat + "," + _lon);
startActivity(new Intent(Intent.ACTION_VIEW, uri));
}
}
```
##### 2. 类似标签浏览功能
现代桌面浏览器的主要特性之一是标签浏览,但在移动设备上实现可能不太实用。不过,可以使用TabActivity和Intent对象来实现类似的标签浏览器。但由于安全原因,不能在标签中托管其他应用的活动,只能使用自己的活动。
以下是一个示例代码:
```java
package com.commonsware.android.intenttab;
import android.app.Activity;
import android.app.TabActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebView;
import android.widget.TabHost;
public class IntentTabDemo extends TabActivit
```
0
0
复制全文
相关推荐









