【问题标题】:Activity being recreated even after setting launchMode="singleTop"即使在设置launchMode =“singleTop”后重新创建活动
【发布时间】:2015-12-19 06:39:35
【问题描述】:

我正在使用自定义方案为 Fitbit 实现 OAuth,为此我需要在用户在默认浏览器中登录并重定向到 CALLBACK 后从堆栈顶部使用调用 Activity 的实例网址。而不是onNewIntent() 被调用,Activity 只是重新创建,这不是我需要的。

<activity
        android:name=".AppsAndDevicesActivity"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="snbr" />
        </intent-filter>
    </activity>  

我正在使用以下代码从 Fragment 打开浏览器:

String url = Fitbit.buildAuthenticationURL();
Log.d("URL", url);
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
this.getActivity().startActivity(browserIntent);

【问题讨论】:

    标签: android android-fragments android-intent android-activity android-manifest


    【解决方案1】:

    将启动模式用作singleTask,因为:

    单个任务:

    系统创建一个新任务并在新任务的根目录下实例化活动。 但是,如果 Activity 的实例已经存在于单独的任务中,系统会通过调用其 onNewIntent() 方法将 Intent 路由到现有实例,而不是创建新实例。 只有一个Activity 的实例可以同时存在。

    注意:尽管 Activity 在新任务中开始,但“后退”按钮仍将用户返回到上一个 Activity。

    【讨论】:

    • 谢谢。我已经尝试过了,它几乎可以按要求工作,但为什么问题中的方法不起作用。它似乎对其他人有用。另外,singleTask 一定要开始一项新任务吗?如果是,创建新任务的副作用是什么?
    猜你喜欢
    • 2014-11-04
    • 2017-02-27
    • 2017-02-12
    • 1970-01-01
    • 2020-02-01
    • 2022-11-02
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    相关资源
    最近更新 更多