【问题标题】:Getting Intent when App re-launch应用重新启动时获取 Intent
【发布时间】:2014-12-03 14:10:36
【问题描述】:

假设一个应用程序中只有 2 个活动:
1. 活动 A(启动器活动)
2. 活动B


onCreate()Acrivity A 的代码:

Intent intent = new Intent();
    intent.putExtra("key", "test");
    intent.setClass(this, ActivityB.class);
    startActivity(intent);
    finish();  

因此,通过传递数据从 Activity A 启动 Activity BActivity A 也会被销毁。


所以,如果我是第一次启动该应用程序:
1. 活动 A 开始
2. Activity A 启动 Activity B 并带有数据
3. Activity A被销毁

假设如果我在 Activity B 中按下返回键,Activity B 会被销毁,应用程序退出,如果我重新启动应用程序:
1. Activity B 直接启动,获取与 Activity A 设置的相同数据。


我的问题是:
重新启动应用时如何停止获取此意图?
Activity B在重新启动后开始,不是问题,我只是想停止获取该意图。


AndriodManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.listnertest"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="ActivityA"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="ActivityB"
        android:label="@string/app_name" >
    </activity>
</application>

【问题讨论】:

  • 您使用什么 Intent 标志?您的 AndroidManifest 中有什么与此相关的内容吗?
  • 当您重新启动应用程序时,应启动 Activity A。和第一次一样。
  • 我没有使用任何标志。重新启动应用程序 ActivityB 也会启动。可以从 2 个地方重新启动。首先是点击启动器图标,其次是最近的应用程序。

标签: android android-intent android-activity android-task


【解决方案1】:

每次启动应用程序时,它都会运行 ActivityA。由于您告诉 ActivityA 在创建时将数据发送到 ActivityB,因此它每次都会这样做。

听起来好像在第二次,你仍然想启动 ActivityB,但不是你在意图中额外输入的数据,对吗?无论您是否已发送该数据,您都需要跟踪应用程序的启动。一种方便的方法是 SharedPreferences。

Intent intent = new Intent();
SharedPreferences prefs = activity.getSharedPreferences("my_prefs", 0);
if (!prefs.contains("sent_key")) {
    intent.putExtra("key", "test");
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("sent_key", true);
    editor.commit();
}
intent.setClass(this, ActivityB.class);
startActivity(intent);
finish();  

这将使ActivityA总是启动ActivityB,但它只会在第一次发送数据。

【讨论】:

  • 实际上,如果我重新启动应用程序,ActivityB 会在没有启动 ActivityA 的情况下启动,并且 ActivityB 的启动不在我的控制范围内,它是由 android 系统自动调用的。问题对您来说不是很清楚,但是从您的解决方案中,我对共享偏好有所了解。当 ActivityA 启动时,我将数据放入共享首选项中,当 ActivityB 启动时,我从共享首选项中获取该数据,然后清除该共享首选项,所以第二次,我不会获取数据。谢谢你的答复。 :)
猜你喜欢
  • 1970-01-01
  • 2016-12-20
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多