即使在设置launchMode =" singleTop"之后也会重新创建活动。

时间:2015-12-19 06:39:36

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

我正在使用自定义方案为Fitbit实施OAuth,为此我要求在用户登录默认浏览器后从堆栈顶部使用调用Activity的实例并重定向到CALLBACK网址。而不是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 个答案:

答案 0 :(得分:6)

将launchmode用作 singleTask ,因为:

singleTask:

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

注意:虽然活动在新任务中开始,但“后退”按钮仍会将用户返回到上一个活动。