设置了launchMode="singleTop"后,Activity仍然被重新创建的问题

3

我正在使用自定义方案为Fitbit实现OAuth,为此我需要在用户登录默认浏览器并重定向到回调URL后使用调用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);
1个回答

6

使用启动模式singleTask,原因如下:

singleTask:

系统会创建一个新的任务,并在新任务的根处实例化活动。 但是,如果该活动的实例已经存在于另一个任务中,则系统通过调用其onNewIntent()方法将意图路由到现有实例,而不是创建新实例。同一时间只能存在一个活动实例。

注意:尽管活动在新任务中启动,但“返回”按钮仍将用户返回到上一个活动。


谢谢。我已经尝试过那个方法,它基本上可以按照要求工作,但为什么问题中的方法不起作用呢?它似乎对其他人有效。此外,singleTask是否一定会启动一个新任务?如果是,创建新任务的副作用是什么? - Abdul Fatir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接