【问题标题】:OnResume to only happen when activity is accessed the second timeOnResume 仅在第二次访问活动时发生
【发布时间】:2018-10-12 17:44:55
【问题描述】:

我正在尝试为我的 android 应用程序编写代码,以便在活动恢复时发生一些事情。虽然我只希望在第二次而不是第一次重新访问活动时发生这种情况。

所以我希望用户在第一次访问活动时在 onCreate 方法中做他们需要做的事情,然后当他们返回活动时,onResume 代码就会发生。

我应该使用不同的方法还是如何实现我想要做的事情?

public void onResume(){
    super.onResume();

    RunningStatus = sharedPreferences.getBoolean("RunningStatus", false);

    if (isS1Pressed) {
        if (isPressed) {
            if (RunningStatus = false) {
                pause.setBackgroundResource(R.drawable.start);
            }
        }
    }

编辑:

我不是指第二次,而是指以后每次。基本上我有一条生产线,我的应用程序决定它是领先还是落后。因此,当用户进入此活动时,可以执行计算。我们有一个暂停按钮,如果生产线在现实生活中已经停止,用户可以暂停生产线。虽然我希望用户可以离开该特定生产线并在其他生产线上进行计算。虽然在我离开活动的那一刻,我失去了所有的状态。

谢谢

【问题讨论】:

  • 您希望它只发生第二次还是以后发生?此外,它是否意味着仅在您从某个活动返回时发生,或者每次在屏幕上“看到”该活动时才会发生?
  • 为什么不直接放入onResume(),在onCreate()之后调用
  • 通读您的问题,您似乎不太了解Activity lifecycle
  • “首次访问”是指首次访问,还是应用程序打开后首次访问?我的意思是如果我打开应用程序,转到您的活动,然后关闭(完全关闭,不仅按主页按钮),然后重新打开应用程序并转到您的活动,这将被视为第二次?
  • “当他们返回时”和“第二次”是指用户在您的活动中,他打开一个新活动(例如通过按下按钮)然后返回第一个活动活动(例如通过按回)?在这种情况下寻找OnActivityResult()

标签: java android android-studio android-activity onresume


【解决方案1】:

我假设您已经经历了活动生命周期,如果没有,请访问 https://developer.android.com/guide/components/activities/activity-lifecycle

boolean secondUse=false;//this should be a field in the activity class

onRestart() 方法仅在我们访问该活动并返回然后我们访问时调用(即当该活动已在活动堆栈中时)。

如果您有其他用例,那么使用 sharedPreference 会更好。

覆盖 onRestart() 在里面写下以下内容

if(!seconduse){
//do your stuff
secondUse=true;
}

正如您在编辑中所说,您需要在第一次访问后的每次访问中使用这些东西,然后只需将您的代码放入 onRestart() 方法中

public void onRestart(){
super.onRestart();

RunningStatus = sharedPreferences.getBoolean("RunningStatus", false);
   if (isS1Pressed) {
    if (isPressed) {
        if (RunningStatus = false) {
            pause.setBackgroundResource(R.drawable.start);
        }
    }
   }
}

【讨论】:

    【解决方案2】:

    如果你想在非常特定的时间做一些事情(只有第 2 次,而不是第 1 次或第 3 次、第 4 次……),我建议你应该使用一些计数器变量并使用活动方法 onSaveInstanceState() 和 onRestoreInstanceState() 来存储和检索。如果您不想在应用程序被杀死时重置计数器,请使用 SharePreference 之类的数据持久存储计数器。

    【讨论】:

      【解决方案3】:

      您可以使用布尔标志。在onResume 例如

      if (secondVisit) {
        ...
      } else secondVisit = true;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        • 2011-09-01
        • 2023-02-02
        • 2021-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多