在Android中重新加载Activity
是一个好习惯吗?
最好的方法是什么? this.finish
然后this.startActivity
与活动Intent
?
你可以简单地使用
finish();
startActivity(getIntent());
从内部刷新Activity
。
我有同样的问题
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
这段代码对我有用。 Android api 17
我认为这不是一个好主意......实施更清洁的方法会更好。例如,如果您的活动包含表单,则清理方法可以清除表单中的每个窗口小部件并删除所有临时数据。我想这就是你想要的:将活动恢复到初始状态。
经过一段时间的实验,我发现重新启动活动没有意外的后果。另外,我认为这与Android在方向改变时默认情况非常类似,因此我没有理由不在类似情况下这样做。
在活动中,您可以调用recreate()
来“重新创建”活动(API 11+)
重新加载整个活动可能是一项繁重的任务。只需将必须刷新的代码部分放入(kotlin):
override fun onResume() {
super.onResume()
//here...
}
Java的:
@Override
public void onResume(){
super.onResume();
//here...
}
并在需要时调用“onResume()”。
我有另一种方法:将我的活动的launchMode
设置为singleTop
而不调用finish()
,只需startActivity(getIntent())
就可以完成这项工作。只需要关心onCreate()
和onNewIntent
的新数据。有了Sush的方式,应用程序可能会像AMAN SINGH所说的那样闪烁。但是AMAN SINGH的方法仍然会创造一种新的活动,即使他修复了“眨眼”问题,我认为这种活动是不必要的。
这个问题太迟了,但如果有人在寻找解决方案,那么就是这样。
这是我在更改从首选项更改返回后重新加载活动的操作。
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
这实际上导致活动重绘自己。
更新:更好的方法是调用recreate()
方法。这将导致重新创建活动。
对于那些不想在重新创建()方法之后看到闪烁的人,只需使用
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
我需要快速更新我的一个应用程序中的消息列表,所以在关闭我所在的对话框之前,我只是刷新了我的主UI活动。我相信还有更好的方法可以实现这一点。
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Android包括一个进程管理系统,用于处理活动的创建和销毁,这在很大程度上抵消了您从手动重新启动活动中看到的任何好处。您可以在Application Fundamentals上查看有关它的更多信息
但是,良好的做法是确保onPause和onStop方法释放您不需要保留的任何资源,并使用onLowMemory将您的活动需求减少到绝对最小值。
我看到了之前使用Intent重新加载活动的答案。这些可以工作但你也可以使用Activity类本身给出的recreate()方法。
而不是写这个
//关闭对话框后刷新主要活动
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
这可以通过仅写这个来完成
recreate();
简单地用
this.recreate();
这将触发活动中的onCreate方法
从一个意图开始你的相同activity
并关闭activity
。
Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.
在某些情况下,这是其他方面的最佳做法,如果您选择使用以下内容进行上下文操作,那么这不是一个好主意,这是将活动传递给她的儿子的最佳方式:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
事情是每当你完成()来自activityIWishToRun,你就会回到你的生活活动中