重启singleTask Activity

时间:2014-12-16 14:11:26

标签: 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;
    }
}

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();
}
}

这是该活动的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>

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

3 个答案:

答案 0 :(得分:6)

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

Intent intent = getBaseContext().getPackageManager()
            .getLaunchIntentForPackage(getBaseContext().getPackageName());
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

答案 1 :(得分:0)

        // get rid of this activity instance and start a new one
        finish();
        Intent intent = new Intent(MyApp.getInstance(), MyActivity.class);
        startActivity(intent);

答案 2 :(得分:0)

如果您只想重新开始活动,则可以这样做

this.recreate();

这将重新创建您的活动。