重启singleTask Activity

Mar*_*usz 0 android

我写了启动器活动,有选项显示或隐藏壁纸,我使用两个主题

机器人:Theme.Holo.Light.NoActionBar

机器人:Theme.Wallpaper.NoTitleBar

改变它我做

@Override
protected void onNewIntent(final Intent intent) {
    super.onNewIntent(intent);
    Utils.PrintInfo("MainActivity.onNewIntent");


    if (AppSettings.Data.WallpaperThemeChanged) {
        AppSettings.Data.WallpaperThemeChanged = false;


        startActivity(new Intent(this, ThemeReloadActivity.class));

        finish();
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

ThemeReloadActivity这样的

public class ThemeReloadActivity extends Activity {

@Override
protected void onResume() {

    Utils.PrintError("ThemeReloadActivity.onCreate");

    Activity activity = MainActivity.getMainActivity();
    activity.finish();
    startActivity(new Intent(activity, activity.getClass()));
    super.onResume();
}
}
Run Code Online (Sandbox Code Playgroud)

这是该活动的Manifest片段

<activity
        android:name="com.maxcom.launcher.MainActivity"
        android:clearTaskOnLaunch="true"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:screenOrientation="portrait"
        android:stateNotNeeded="true" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

但有时如果我垃圾邮件主页主题没有改变,看起来应用程序根本不会重新启动

Cha*_*nth 6

您可以通过以下代码重新启动应用程序

Intent intent = getBaseContext().getPackageManager()
            .getLaunchIntentForPackage(getBaseContext().getPackageName());
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

  • 要仅重新启动一个活动,可以使用"recreate()"方法. (5认同)