在Android中重新加载活动

问题描述 投票:189回答:15

在Android中重新加载Activity是一个好习惯吗?

最好的方法是什么? this.finish然后this.startActivity与活动Intent

android android-activity
15个回答
461
投票

你可以简单地使用

finish();
startActivity(getIntent());

从内部刷新Activity


2
投票

我有同样的问题

import android.support.v4.content.IntentCompat;

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

这段代码对我有用。 Android api 17


1
投票

我认为这不是一个好主意......实施更清洁的方法会更好。例如,如果您的活动包含表单,则清理方法可以清除表单中的每个窗口小部件并删除所有临时数据。我想这就是你想要的:将活动恢复到初始状态。


1
投票

经过一段时间的实验,我发现重新启动活动没有意外的后果。另外,我认为这与Android在方向改变时默认情况非常类似,因此我没有理由不在类似情况下这样做。


1
投票

在活动中,您可以调用recreate()来“重新创建”活动(API 11+)


1
投票

重新加载整个活动可能是一项繁重的任务。只需将必须刷新的代码部分放入(kotlin):

override fun onResume() {
    super.onResume()
    //here...
}

Java的:

@Override
public void onResume(){
    super.onResume();
    //here...

}

并在需要时调用“onResume()”。


0
投票

我有另一种方法:将我的活动的launchMode设置为singleTop而不调用finish(),只需startActivity(getIntent())就可以完成这项工作。只需要关心onCreate()onNewIntent的新数据。有了Sush的方式,应用程序可能会像AMAN SINGH所说的那样闪烁。但是AMAN SINGH的方法仍然会创造一种新的活动,即使他修复了“眨眼”问题,我认为这种活动是不必要的。

这个问题太迟了,但如果有人在寻找解决方案,那么就是这样。


38
投票

这是我在更改从首选项更改返回后重新加载活动的操作。

@Override
protected void onResume() {

   super.onResume();
   this.onCreate(null);
}

这实际上导致活动重绘自己。

更新:更好的方法是调用recreate()方法。这将导致重新创建活动。


36
投票

对于那些不想在重新创建()方法之后看到闪烁的人,只需使用

 finish();
 overridePendingTransition(0, 0);
 startActivity(getIntent());
 overridePendingTransition(0, 0);

10
投票

我需要快速更新我的一个应用程序中的消息列表,所以在关闭我所在的对话框之前,我只是刷新了我的主UI活动。我相信还有更好的方法可以实现这一点。

// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //

9
投票

Android包括一个进程管理系统,用于处理活动的创建和销毁,这在很大程度上抵消了您从手动重新启动活动中看到的任何好处。您可以在Application Fundamentals上查看有关它的更多信息

但是,良好的做法是确保onPause和onStop方法释放您不需要保留的任何资源,并使用onLowMemory将您的活动需求减少到绝对最小值。


8
投票

我看到了之前使用Intent重新加载活动的答案。这些可以工作但你也可以使用Activity类本身给出的recreate()方法。

而不是写这个

//关闭对话框后刷新主要活动

Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();

这可以通过仅写这个来完成

recreate();

7
投票

简单地用

this.recreate();

这将触发活动中的onCreate方法


6
投票

从一个意图开始你的相同activity并关闭activity

Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.

3
投票

在某些情况下,这是其他方面的最佳做法,如果您选择使用以下内容进行上下文操作,那么这不是一个好主意,这是将活动传递给她的儿子的最佳方式:

    Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);    
    startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);

事情是每当你完成()来自activityIWishToRun,你就会回到你的生活活动中

© www.soinside.com 2019 - 2024. All rights reserved.