Activity
在Android中重新加载,是一种好习惯吗?
最好的方法是什么?this.finish
然后this.startActivity
进行活动Intent
?
Activity
在Android中重新加载,是一种好习惯吗?
最好的方法是什么?this.finish
然后this.startActivity
进行活动Intent
?
Answers:
您可以简单地使用
finish();
startActivity(getIntent());
Activity
从自身内部刷新。
对于那些不想在recreate()方法之后看到眨眼的人,只需使用
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
这是我在更改首选项更改的返回值后重新加载活动的操作。
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
这实质上导致活动重绘自身。
更新: 更好的方法是调用该recreate()
方法。这将导致重新创建活动。
我看到了使用Intent重新加载活动的较早答案。这些将起作用,但是您也可以使用Activity类本身中提供的recreate()方法来执行相同的操作。
而不是写这个
//关闭对话框后刷新主活动
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
这可以通过只写这个来完成
recreate();
recreate()
是我的解决方案-“重新启动”该活动对我而言不起作用,因为我使用“ StartActivityForResult”启动了该活动,因此行为中断了。
只需使用
this.recreate();
这将触发活动中的onCreate方法
Android包含一个处理活动创建和销毁的流程管理系统,这在很大程度上抵消了您手动重启活动会看到的任何好处。您可以在“ 应用基础知识”中查看有关它的更多信息。
不过,好的做法是确保onPause和onStop方法释放不需要保留的任何资源,并使用onLowMemory将活动需求减少到最低限度。
我认为这不是一个好主意……实施更简洁的方法会更好。例如,如果您的活动包含一个表单,那么cleaner方法可以仅清除表单中的每个小部件并删除所有临时数据。我想这就是您想要的:将活动还原到其初始状态。
经过一段时间的试验,我发现重新启动活动没有意外的后果。另外,我相信这与方向更改时Android默认情况下的操作非常相似,因此我认为没有理由在类似情况下不这样做。
我有同样的问题
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
这段代码对我有用。Android API 17
在活动中,您可以调用recreate()
“重新创建”活动(API 11+)
我用这个,它可以正常工作
finish()
startActivity(getIntent());
对我来说,它正在工作,不是在创建另一个Intent,而是在相同的Intents上加载新数据。
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);