我有两个需要按特定顺序执行的“验证”代码块,但是onpostreate()事件中的代码在oncreate()事件中的代码之前触发,我怀疑这可能与首选项存储有关。
一些伪代码可能有助于解释:

onCreate()
{
  prefs = PreferenceManager.getDefaultSharedPreferences(this);
  email = prefs.getString("email", "[email protected]").toString();
  if (email.equals("[email protected]"))
  {
    //user has not supplied email address, show alert dialog
    warning();
  }
}

warning()方法只构建一个警告对话框,让用户知道他们需要输入电子邮件地址,当他们单击“确定”时,它会启动“首选项”活动,以便他们可以提供电子邮件地址。
onPostCreate()
{
  carrier = manager.getNetworkOperatorName();
  if(carrier.equals("SPRINT"))
  {
    //call web service to validate carrier compatibility
    //if web service returns "FALSE" call warning2();
  }
}

warning2()方法的作用与warning()相同-它构建一个警报对话框,让用户知道他们的载体不兼容。
即使在oncreate()中调用warning(),在onpostreate()中调用warning2(),但目前应用程序正在warning2()对话框之前抛出warning2()对话框,我不明白为什么。
是不是因为第二个验证调用了一个web服务,而第一个验证正在检查首选项存储,并且web服务调用以某种方式在访问首选项存储之前完成?
如何强制第一个验证和warning()在第二个验证和warning2()之前处理?

最佳答案

你确定它是先调用warning2对话框,还是先看到它?对话框不会阻塞主活动,因此它可能首先调用warning,但紧接着,它调用warning2,这将覆盖第一个对话框。所以你会看到warning2,直到它被解除,才看到warning2,因为它是在它的正下方分层的。

关于android - Android-在onCreate()代码之前触发onPostCreate()代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12353412/

10-08 23:24