Java 当将Android活动从堆栈带到前端时,如何刷新(重新初始化)它们?所以再次运行onCreate等

Java 当将Android活动从堆栈带到前端时,如何刷新(重新初始化)它们?所以再次运行onCreate等,java,android,android-intent,android-activity,android-pendingintent,Java,Android,Android Intent,Android Activity,Android Pendingintent,如果我将Android活动从堆栈带到前端,如何刷新它们?所以再次运行onCreate等 Intent intent = new Intent(myActivity.this, myActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); 下面的代码与将Android清单中的活动设置为Android:launchMode=“singleTask”相

如果我将Android活动从堆栈带到前端,如何刷新它们?所以再次运行onCreate等

Intent intent = new Intent(myActivity.this,
        myActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
下面的代码与将Android清单中的活动设置为Android:launchMode=“singleTask”相结合,允许我启动一个活动,前提是该活动在堆栈中尚未激活,如果该活动在堆栈中处于活动状态,则将其带到最前面

那么,如果活动被带到前台,我该如何刷新它,以便再次运行onCreate等

Intent intent = new Intent(myActivity.this,
        myActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

如果您只想刷新内容,则应覆盖
onResume
方法,并添加代码以在此方法中执行刷新。要执行此操作,请在要执行刷新的活动中使用以下代码(即,不是从中调用
startActivity()
):

提示:如果您使用的是Android Studio,请按Alt+Insert(同时打开Java文件),然后单击
覆盖方法
,在Resume上查找
,它应该为您提供方法的基本模板

我添加的图表显示了方法的运行顺序(这称为活动生命周期)<每次首次创建活动时,都会运行code>onCreate()
,然后是
onStart()
,然后是
onResume()
。如您所见,当用户返回某个活动时,
onCreate()
不会再次运行。相反,
onResume()
是第一个被调用的方法。因此,通过将代码放入
onResume()
方法,当用户返回活动时,它将运行。(与不再运行的
onCreate()
不同)

<强>额外信息:< /强>,因为您将在“代码> OnCeCATE()/代码>中初始设置数据,然后在<代码> OnReSuMe()/代码>中刷新它,您可能需要考虑移动所有用于将数据初始设置为<代码> OnReSuMe()/<代码>的代码。这将防止冗余

编辑:根据您的以下评论,我可以给出以下解决方案:

我希望正确刷新页面,例如,如果存在初始化为0的变量计数。虽然运行该活动,但它的值已变为300。当活动被调用(意图)然后刷新时,计数将再次等于它的初始值。你知道怎么做吗

如果没有您当前活动的代码,就没有多少工作要做,但下面是一些伪代码,说明我将如何解决您的问题:

public class MyActivity extends Activity {
    TextView numberTextView;
    int numberToDisplay;

    @Override
    protected void onCreate(Bundle bundle){
        super.onCreate(bundle);
        setContentView(myContent);

        numberTextView = (TextView) findViewById(R.id.numberTextView);
        numberTextView.setText(numberToDisplay+"")//converts the integer to a string
    }

    @Override
    protected void onResume(){
        super.onResume();
        numberToDisplay = 0;
        numberTextView.setText(numberToDisplay+"");
    }
}
Intent intent = new Intent(myActivity.this, myActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

我认为没有一种明确的方法可以在创建时刷新,也许您需要添加要重新加载到
onResume
中的代码

如果要将代码保存在
onCreate
中,此解决方法可能会起作用

finish();
startActivity(getIntent());

我认为FLAG_ACTIVITY_CLEAR_TOP将解决您的问题:

public class MyActivity extends Activity {
    TextView numberTextView;
    int numberToDisplay;

    @Override
    protected void onCreate(Bundle bundle){
        super.onCreate(bundle);
        setContentView(myContent);

        numberTextView = (TextView) findViewById(R.id.numberTextView);
        numberTextView.setText(numberToDisplay+"")//converts the integer to a string
    }

    @Override
    protected void onResume(){
        super.onResume();
        numberToDisplay = 0;
        numberTextView.setText(numberToDisplay+"");
    }
}
Intent intent = new Intent(myActivity.this, myActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

我如何通过编程实现这一点?您可以从上面的代码中看到我是如何打开或重新安排活动的。我在答案中添加了
onResume()
方法的模板。当我使用代码从堆栈中重新组织并将活动放在前面时,这将刷新页面内容?或者我需要添加一些东西来代替你的评论吗?虽然你所写的内容非常丰富,但实际上并没有回答我的问题。您建议在那里放置什么代码?发布您现有的代码,以便我可以尝试向您展示,您目前拥有的信息不足以回答问题。您可以从我上面的代码中看到,我是如何开始或重新安排活动的。我应该在哪里添加这个,这肯定会刷新正在被重新组织并放在前面的页面吗?这很难看,但是在您第一次调用startActivity(在代码中)之后,您可以尝试再次调用finish()和startActivity(在代码末尾添加我的两行代码)。也就是说,基于onResume的刷新可能是需要考虑的问题。将代码放入
onResume
方法中。你不能调用onCreate,除非你完全销毁了活动,然后它再次重新启动…根据你的问题、评论和这里的答案,我认为你找错了方向。你试图滥用Android提供给你的所有标准工作流程和导航机制,你给自己制造了更多的问题。我建议你解释一下期望的行为是什么,也许someobody可以帮助你纠正你的架构。除非你有很好的理由,否则你不应该使用`launchMode=“singleTask”,而重新安排活动的唯一理由是如果你想保留它们的状态。将活动带到前端,然后重新初始化它。。。