在Android中重新加载活动

在Android中重新加载活动,android,android-activity,Android,Android Activity,在Android中重新加载活动是一种好的做法吗 最好的方法是什么这个。完成然后用活动意图?我认为这不是一个好主意。。。最好实施一种更干净的方法。例如,如果您的活动持有一个表单,cleaner方法可以只清除表单中的每个小部件并删除所有临时数据。我想这就是您想要的:将活动恢复到其初始状态。在某些情况下,这是最佳做法,而在另一些情况下,这不是一个好主意,因为它是上下文驱动的 如果您选择这样做,请使用以下方法将活动传递给她的儿子: Intent i = new Intent(myCurrentA

Android中重新加载
活动是一种好的做法吗


最好的方法是什么<编码>这个。完成
然后用活动
意图

我认为这不是一个好主意。。。最好实施一种更干净的方法。例如,如果您的活动持有一个表单,cleaner方法可以只清除表单中的每个小部件并删除所有临时数据。我想这就是您想要的:将活动恢复到其初始状态。

在某些情况下,这是最佳做法,而在另一些情况下,这不是一个好主意,因为它是上下文驱动的 如果您选择这样做,请使用以下方法将活动传递给她的儿子:

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

问题是,每当你完成活动()时,你就会返回到你的活动中去。一个活生生的活动

Android包括一个流程管理系统,它处理活动的创建和销毁,这在很大程度上否定了手动重新启动活动所带来的任何好处。有关它的更多信息,请访问


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

尝试了一段时间后,我发现重新启动活动不会产生意外的后果。另外,我认为这与Android在方向改变时默认的做法非常相似,因此我看不出在类似情况下不这样做的理由。

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

// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
你可以简单地使用

finish();
startActivity(getIntent());
this.recreate();

要从内部刷新
活动

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

@Override
protected void onResume() {

   super.onResume();
   this.onCreate(null);
}
这本质上会导致活动重新绘制自身


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

以相同的
活动开始,然后关闭
活动

Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.
我也有同样的问题

import android.support.v4.content.IntentCompat;

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
这个代码对我有用。
Android api 17

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

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

我有另一种方法,比如:将我的活动的
启动模式设置为
singleTop
,不调用
finish()
,只需
startActivity(getIntent())
就可以了。您只需关心
onCreate()
onNewIntent
中的新数据。按照Sush的方式,应用程序可能会像AMAN SINGH所说的那样闪烁。但阿曼·辛格的方法仍然会创造一种新的活动,这种活动在某种程度上是不必要的,即使他解决了“眨眼”问题,我认为


对于这个问题来说太晚了,但是如果有人在寻找解决方案,那么就在这里。

我看到了前面给出的关于使用Intent重新加载活动的答案。这些方法可以工作,但您也可以使用Activity类本身中给出的recreate()方法执行相同的操作

而不是写这个

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

Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
这可以通过只写这个来完成

recreate();
简单使用

finish();
startActivity(getIntent());
this.recreate();

这将触发活动中的onCreate方法,您可以在活动中调用
recreate()
“重新创建”活动(API 11+)

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

爪哇:


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

登录后,我遇到了同样的问题,因此我使用了

@Override
protected void onRestart() {
    this.recreate();
    super.onRestart();
}

我用过这个,不用它也行
finish()


对我来说,它正在工作,它没有创建另一个意图,并且在相同的意图上加载了新的数据

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

实际上,我想更改应用程序状态,然后重新加载活动以反映更改。在您的情况下,“应用程序状态”是什么?首选项?+1用于提及onLowMemory。我不知道有这样的方法!相反,我试图通过重新启动活动来“刷新”屏幕。表面上看没有任何问题,我的信息更新了我想要的,LogCat讲述了一个不同的故事。在LogCat中,我回到了活动的onCreate方法,它尝试提取首选项。第一次尝试我收到一个空指针异常,然后它再次尝试在onCreate中启动,并在第二次通过接收StoredRef。我不知道这里发生了什么,但我只是想确定你不是简单地看结果,因为WYSIWIG对我来说不是这样。你到底是如何重新启动活动的?这可能很旧,但你只是为我节省了很多时间!:)如果不能在activity类内调用它怎么办?有没有使用上下文引用的方法?@giorgiline-是的,创建一个在activity类内定义的接口,并将该接口作为参数传递给使用它的任何外部类。哇,我不认为这会这么容易。你如何处理一个已经开始的活动的结果?你能在原始调用方仍然收到结果的情况下重新启动吗?@tothpu-虽然没有尝试,但理论上我认为是的。但是,第二次完成活动时,它不会将结果返回给第一次创建它的活动。我不是一名经验丰富的Android开发人员,但重新启动活动听起来像是拙劣的设计,只能在极端情况下进行。@Hudson配置更改时会发生这种情况。如果这是一个好的设计或不是,这完全是另一个讨论@哈德逊因此,您现在拥有5年的开发经验:D@PratikButani,我认识你吗?:)我现在有8年的工作经验,但在Android开发方面没有太多经验。
    overridePendingTransition(0, 0);
    finish();
    overridePendingTransition(0, 0);
    startActivity(getIntent());
    overridePendingTransition(0, 0);