【问题标题】:"onCreate()" method is not called from another intent filter没有从另一个意图过滤器调用“onCreate()”方法
【发布时间】:2018-12-03 13:58:50
【问题描述】:

我有一个 Activity --> A 它有两个意图过滤器。当第一次调用 onCreate() 方法时。没关系。但是当它已经被一个意图过滤器调用时,如果它被另一个意图过滤器调用,则不会调用 onCreate() 方法。

这是清单中的 Activity 标记:

<activity
        android:name=".login.Login"
        android:configChanges="orientation|keyboardHidden"
        android:windowSoftInputMode="adjustResize"
        android:launchMode="singleTask"
        >
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />


        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data
                android:scheme="content"
                android:mimeType="application/octet-stream"
                android:pathPattern=".*\\.octopus"
                tools:ignore="AppLinkUrlError" />
        </intent-filter>

    </activity>

这是Activity的onCreate:

public void onCreate(Bundle savedInstanceState) {

    if (getResources().getBoolean(R.bool.portrait_only)) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
    super.onCreate(savedInstanceState);

// this is true when the second intent filter is used

        Uri data = getIntent().getData();
        if (data != null) {
            getIntent().setData(null);
            try {
                importData(data);
            } catch (Exception e) {
                // warn user about bad data here
                finish();
                return;
            }
        }


......
......

}

【问题讨论】:

    标签: android


    【解决方案1】:

    您可能希望使用 launchMode 的 SingleTop 模式。通过使用它,您将在 android Activity Lifecycle 方法的onNewIntent(Intent intent) 中收到新的 Intent。

    换句话说,如果 Activity 已经在顶部,并且新 Intent 正在启动该 Activity,那么新 Intent 将通过 onNewIntent() 方法传递到相同的 Activity 实例。

    【讨论】:

    • 我试过了,但是创建了两个应用实例。创建的第一个应用程序实例也在那里。请帮忙
    • 使用SingleTop。您可以参考此链接以了解有关启动模式的更多信息。 medium.com/@iammert/android-launchmode-visualized-8843fc833dbe
    • 非常感谢。我提到了它,但现在的问题是当设置了单顶启动模式时,如果它不在任务之上,那么将创建新的 Activity 实例。然后有两个相同的活动。这让用户感到困惑。请帮助
    • 我想这是正确的方法。因为如果你使用singleTask,如果 A 在那里,你正在启动 B 并再次启动 A。新的意图将被传递给 A,但 B 将被销毁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2020-02-20
    相关资源
    最近更新 更多