写道
从一个Activity启动另一个Activity并传递一些数据到新的Activity上非常简单,但是当您需要让后台运行的Activity回到前台并传递一些数据可能就会存在一点点小问题,也就说如果一个activity多次被调用,为了减少内存的消耗。
在默认情况下,当您通过Intent启到一个Activity的时候,就算已经存在一个相同的正在运行的Activity,系统都会创建一个新的Activity实例并显示出来。为了不让Activity实例化多次,我们需要通过在AndroidManifest.xml配置activity的加载方式(launchMode)以实现单任务模式,如下所示:
<activity android:label="@string/app_name"
android:launchmode="singleTask"android:name="[包名].MyActivity">
</activity>
launchMode为singleTask的时候,通过Intent启到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法,如下所示:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//必须设置新的Intent否则 getIntent()将返回原来的Intent
setIntent(intent);
//在这里调用你想调用的方法
}
要注意的是:系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法。
分享到:
相关推荐
在Android应用开发中,`onNewIntent()` 是一个重要的生命周期方法,主要负责处理在Activity已经启动并且处于前台或后台时接收到的新Intent。这个方法在特定的`launchMode`下被调用,例如`singleTask`或`...
- **生命周期影响**:当使用`singleTask`或`singleInstance`启动模式时,若活动已经在任务栈中存在,则新的意图不会导致新实例的创建,而是通过调用`onNewIntent()`方法将意图数据传递给现有实例。 - **数据传递**:...
本篇文章将深入探讨`onNewIntent()`方法的使用及其在Android开发中的实际应用。 首先,`onNewIntent()`方法是在Activity已经存在且处于栈顶状态时,接收到新的Intent时被调用的。这种情况通常发生在以下几种场景: ...
需要注意的是,当Activity接收到新的Intent时,应当使用`setIntent(intent)`方法更新当前Activity的Intent对象,以便于后续可以通过`getIntent()`方法获取到最新的Intent数据。 **示例代码**: ```java @Override ...
下面我们将详细探讨如何使用`android:scheme`来实现URI跳转到APP应用指定的Activity。 首先,我们来创建自定义的URL scheme。在AndroidManifest.xml文件中,我们需要声明我们的Activity并为其设置一个唯一的scheme...
处理搜索结果时,你需要重写`onNewIntent`方法来接收`ACTION_SEARCH`意图,并调用`handleSearchIntent`方法: ```java @Override protected void onNewIntent(Intent intent) { if (Intent.ACTION_SEARCH.equals...
- FLAG_ACTIVITY_SINGLE_TOP:如果目标Activity已经在栈顶,不会再次创建,而是调用onNewIntent()方法。 6. 使用Intent实现Activity之间的通信: - 使用startActivityForResult()启动Activity,获取返回结果。 -...
你可以使用Loader或直接在`onNewIntent()`方法中处理Intent来获取搜索查询。 为了让用户能够触发搜索,你还需要在你的应用程序中提供一个调用搜索对话框的入口点。这通常是通过在选项菜单中添加一个搜索按钮,或者...
3. **处理NFC事件**:在你的`Activity`中覆写`onNewIntent()`方法,该方法会在NFC标签被检测到时被调用。在这里,你可以通过`getTag()`方法获取到`Tag`对象,它是所有NFC标签的基类。 4. **读取M1卡的UID**:M1卡的...
为此,需要在Activity的`onCreate()`或`onNewIntent()`方法中解析Intent中的数据,并根据需要更新界面。同时,为了提供良好的用户体验,Activity可能需要配置启动模式(例如,单实例模式),以避免重复创建相同的...
1. 处理NFC标签事件:在`onNewIntent`方法中,接收并解析NFC标签: ```java @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals...
+ 如果被启动的 Activity 所需的任务栈存在且该任务栈中存在该 Activity 的实例,那么该 Activity 不会重建,系统会调用的 onNewIntent() 方法重用该实例。 * singleInstance 单例模式: + 如果被启动的 Activity ...
以上就是Android平台上使用NFC读写Mifare Ultralight标签的基本步骤。需要注意的是,由于Mifare Ultralight的特性,它只有64个字节的存储空间,分为16个页面,每个页面4个字节。因此,在实际应用中,你需要考虑数据...
`android.permission.NFC` 是使用NFC功能所必需的权限,而`android.hardware.nfc.hce`则表示你的应用支持Host Card Emulation(HCE),用于模拟NFC卡片。 接下来,我们需要创建一个NFC意图过滤器,以便在用户接触...
- **行为**:如果目标Activity已经在栈顶,系统将调用该Activity的`onNewIntent()`方法而不是创建新的实例;如果不在栈顶,则行为与标准模式相同。 - **应用场景**:适用于需要处理重复启动但不希望栈顶Activity...
- `singleTop`:如果目标Activity已经在栈顶,不会创建新的实例,而是调用其`onNewIntent(Intent)`方法。 - `singleTask`:如果栈中已有该Activity的实例,那么会回到该Activity,并清空其上面的所有Activity。 -...
本教程将详细介绍如何使用Android NFC功能读取标签的UID(唯一标识符)。 首先,我们需要理解NFC的基本概念。NFC是一种无线通信标准,工作在13.56MHz频率下,距离一般在4厘米内。它结合了射频识别(RFID)技术,并...
- 当NFC标签靠近设备时,`onNewIntent()`方法会被调用,你可以从中获取到`Intent`并解析出`Tag`对象。 - 通过`Tag`对象,你可以进一步访问特定的NFC技术,例如`IsoDep`,然后使用`connect()`方法建立连接,进行...
- `onNewIntent()`方法中获取NFC标签信息,通过`getTag()`方法访问。 - 使用`Ndef`类的`getNdefMessage()`方法读取标签上的NDEF数据。 - 分析NDEF消息中的记录,每个记录包含类型、ID和payload。 5. NFC标签技术...
4. **处理搜索请求**:在onNewIntent方法中,你可以获取到用户的搜索查询,并根据查询执行相应的搜索操作。搜索结果可以通过Adapter绑定到ListView或其他视图组件上展示。 5. **配置SearchableIntent**:在需要调用...