仅从我的应用外

时间:2016-09-11 01:31:42

标签: java android android-activity

我希望每当我的应用程序被带到前面时进行云同步,如果应用程序在后台消失,则第二次进行云同步。 所以我覆盖了我的活动的onStart和onStop事件方法:

@Override
protected void onStart() {
  super.onStart();
  doSync();
}

@Override
protected void onStop() {
  doSync();
  super.onStop();
}

好的,这对我来说很好但我发现如果我在我的应用程序(onStop)中启动一个新活动(fe SettingsActivity.class)并返回主活动(onStart),也会调用这些方法。 / p>

是否有一种很好的方法可以忽略我自己的活动的调用,只对来自“外部”的调用做出反应,例如:我只想在用户通过按主页按钮停止应用程序时进行同步,并且只有当用户通过应用程序dreawer或应用程序切换器启动应用程序返回应用程序时我才想同步?

+++ SOLUTION +++

现在我找到了解决问题的方法,我想分享一下。也许这不是最好的方式,因为它不是基于SDK的功能,但它很有效,而且非常简单 我声明了一个标志,在创建活动时将其设置为false。每次我在同一个应用程序中启动另一个活动时,我会将标志设置为true并在onPause和onResume中检查其状态。

public class MainActivity extends Activity {
  private boolean transition;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    transition = false;
  }

  private void startSettingsActivity() {
    transition = true;
    Intent intent = new Intent(this, SettingsActivity.class);
    startActivity(intent);
  }

  private void doSync() {
    // all steps for the cloud synchronization
  }

  @Override
  protected void onResume() {
    super.onResume();
    if (!transition) {
      // this is the case the user returns from
      // the app drawer or app switcher or starts
      // the app for the first time, so do sync
      doSync();
    } else {
      // this is the case the user returns from another
      // activity, so don't sync but reset the flag
      transition = false;
    }
  }

  @Override
  protected void onPause() {
    if (!transition) {
      // this is the case the user presses the home button or
      // navigate back (leaves the app), so do final sync
      doSync();
    } else {
      // this is the case the user starts another activity, but
      // stays in the app, so do nothing
    }
    super.onPause();
  }
}

0 个答案:

没有答案