在Android中重新加载活动

hpi*_*que 203 android android-activity

ActivityAndroid中重新加载是一个好习惯吗?

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

Sus*_*ush 485

你可以简单地使用

finish();
startActivity(getIntent());
Run Code Online (Sandbox Code Playgroud)

Activity从内部刷新一个.

  • 哇,我没想到会这么容易。 (3认同)
  • 如果它不能在活动类中调用怎么办?,使用上下文引用的任何方式? (2认同)
  • 调用 finish() 后该活动将无效,我只是好奇为什么会这样。你能回答我吗? (2认同)

AMA*_*NGH 46

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

 finish();
 overridePendingTransition(0, 0);
 startActivity(getIntent());
 overridePendingTransition(0, 0);
Run Code Online (Sandbox Code Playgroud)

  • 惊人的!我想覆盖 Transition 以便用户不会注意到! (4认同)
  • 做得好!用户几乎不会注意到重新加载。 (2认同)

小智 37

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

@Override
protected void onResume() {

   super.onResume();
   this.onCreate(null);
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这可能有效,但强烈建议不要明确调用生命周期方法. (14认同)
  • 很好的解决方案,除非在您的生命周期方法用于其他事情时在某些情况下不起作用。例如,我正在访问手机的相机,当拍照时,屏幕返回到我的活动以将其发布到视图中。通过使用生命周期方法刷新,我被踢出了相机进程,我的照片不会返回到活动中,而是从一开始就得到活动。只是一个需要注意的例子。 (2认同)
  • 在使用 recreate() 时考虑活动的 launchMode 很重要。例如,当我对具有 launchMode=singleTop 的活动调用 recreate() 时,我没有看到 onCreate() 之后被调用。OTOH,如果我没有调用 recreate(),而是显式调用 finish(),然后调用 startActivity(),我确实会看到 onCreate() 之后被调用。 (2认同)

nin*_*edt 10

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

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


Riz*_*wan 10

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

而不是写这个

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

Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Run Code Online (Sandbox Code Playgroud)

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

recreate();
Run Code Online (Sandbox Code Playgroud)


Yas*_*ith 10

只需使用

this.recreate();
Run Code Online (Sandbox Code Playgroud)

这将触发活动中的onCreate方法


Al *_*ton 9

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

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

  • +1提及onLowMemory.我不知道这种方法存在! (2认同)

its*_*sam 6

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

override fun onResume() {
    super.onResume()
    //here...
}
Run Code Online (Sandbox Code Playgroud)

爪哇:

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

}
Run Code Online (Sandbox Code Playgroud)

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


Jor*_*sys 5

从一个意图开始,activity然后关闭activity.

Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.
Run Code Online (Sandbox Code Playgroud)