使用singleTop重新启动MainActivity或应用程序。

时间:2014-03-24 08:54:47

标签: java android android-intent

如果活动有以下内容,我该如何重启我的应用程序或MainActivity?

android:launchMode="singleTop"

我试过了:

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

但是由于singleTop这个不起作用,还有另一种方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:2)

我做了我的主题切换器:

Intent intent = getIntent();
finish();
startActivity(intent);

基本上,我首先调用finish(),并且我正在使用与此活动开始时完全相同的意图。这似乎可以解决问题?

更新:正如下面的Ralf所指出的,Activity.recreate()是API 11及更高版本的出路。如果您在API11 +环境中,这是首选。如果您使用的是API 10或更低版本,您仍然可以检查当前版本并调用上面的代码段。 (请不要忘记向拉尔夫的回答投票!)

public void reload() {

    Intent intent = getIntent();
    overridePendingTransition(0, 0);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish();

    overridePendingTransition(0, 0);
    startActivity(intent);
}

private void restartFirstActivity()
 {
 Intent i = getApplicationContext().getPackageManager()
 .getLaunchIntentForPackage(getApplicationContext().getPackageName() );

 i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK );
 startActivity(i);
 }

答案 1 :(得分:1)

使用此:

 Intent finishIntent = new Intent( this,
                                activity_that_you_want_to_return.class);
 finishIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
 startActivity(finishIntent);

答案 2 :(得分:1)

尝试重启,这可能会对你有所帮助

Intent i = cntxt.getPackageManager().getLaunchIntentForPackage(cntxt.getPackageName() );
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            i.addCategory(Intent.CATEGORY_HOME);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            cntxt.startActivity(i);