我希望每当我的应用程序被带到前面时进行云同步,如果应用程序在后台消失,则第二次进行云同步。 所以我覆盖了我的活动的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();
}
}