Android - 如果Activity是第一次加载(不使用SharedPreferences),如何防止onResume()函数的执行?

11
在我的当前应用程序中,当我第一次加载一个Activity时,onResume函数会被触发。我查看了Activity Lifecycle,但没有找到阻止这种情况发生的方法。

是否可以在不使用SharedPreferences的情况下,防止在第一次加载Activity时触发onResume()函数?


2
为什么你不想这样做呢?有什么重要的事情需要打破 Android 的一致生命周期吗?难道你不能在 onCreate 中完成吗? - RvdK
可能是 Android onCreate onResume 的重复问题。 - Matt Handy
可能是Android onCreate onResume的重复问题。 - M. Haché
1个回答

37

首先,正如RvdK所说,您不应修改Android Activity生命周期,您可能需要重新设计活动行为以符合它。

无论如何,这是我认为最好的方法:

1.在您的Activity内部创建一个布尔变量

public class MyActivity extends Activity{
  boolean shouldExecuteOnResume;
  // The rest of the code from here..
}

2. 在onCreate方法中将其设置为false:

public void onCreate(){
  shouldExecuteOnResume = false
}

3. 然后在您的 onResume 中:

public void onResume(){
  if(shouldExecuteOnResume){
    // Your onResume Code Here
  } else{
     shouldExecuteOnResume = true;
  }

}

通过这种方式,您的onResume将不会在第一次执行(shouldExecuteOnResume为false),但它将在加载活动的所有其他时间执行(因为shouldExecuteOnResume将为true)。 如果活动随后被用户或系统杀死,则下一次加载它时将再次调用onCreate方法,因此onResume等等将不会被执行。


谢谢您的回答。我也使用了您提到的相同方法,但是当我从另一个活动启动“MyActivity”活动时,变量shouldExecuteOnResume被重置。似乎每次调用MyActivity活动时,都会创建一个新实例,而不是使用现有实例。我希望应用程序使用现有的MyActivity实例。 - Jack
你可以尝试将变量设为静态,但我猜问题可能是你永远不知道应用何时会被系统杀死。你可以尝试在onStop中放置一些其他控件来检查发生了什么。 - The Good Giant
谢谢,当我将shouldExecuteOnResume设置为静态时,它起作用了。 - Jack
4
为了避免使用静态方法,可以在活动中添加 android:launchMode="singleTask" 属性来使其成为单任务。这样只会创建一次,每次调用该活动时都会重复使用,并保持 shouldExecuteOnResume 非静态。 - AndyW
你好,当我尝试这个时,我得到了“未调用super异常”。 - TootsieRockNRoll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接