gpt4 book ai didi

android - androidx.lifecycle.DefaultLifecycleObserver 是否有可靠的方法来检测应用程序退出事件?

转载 作者:行者123 更新时间:2023-11-29 02:20:44 24 4
gpt4 key购买 nike

目前,我正在使用 androidx.lifecycle.DefaultLifecycleObserver,在应用“退出”时执行一些代码。我如何定义“退出”是

  • 当按下主屏幕按钮且应用程序在屏幕上不可见时。
  • 当按下“返回”按钮(一次或多次)直到应用程序在屏幕上不可见。
  • 包括您启动子 Activity 的时间,并导致触发主要 Activity 的 onPause
  • 包括手机旋转等配置更改

因此,我使用以下方式来捕获“退出”事件。


public class WeNoteApplication extends MultiDexApplication {

public static class AppLifecycleObserver implements DefaultLifecycleObserver {
@Override
public void onResume(LifecycleOwner owner) {
// Capture "launch" event when app is "launched"
}

@Override
public void onPause(LifecycleOwner owner) {
// Capture "quit" event when app is "quit"
}
}

private static final AppLifecycleObserver appLifecycleObserver = new AppLifecycleObserver();

private static WeNoteApplication me;
private SharedPreferences sharedPreferences;

@Override
public void onCreate() {
super.onCreate();

me = this;

initLifecycleObserver();
}

private void initLifecycleObserver() {
Lifecycle lifecycle = ProcessLifecycleOwner.get().getLifecycle();
lifecycle.removeObserver(appLifecycleObserver);
lifecycle.addObserver(appLifecycleObserver);
}

public static WeNoteApplication instance() {
return me;
}
}

这在大多数情况下都运行良好,但始终如此

以下是使应用“退出”事件失败的边缘情况。

  1. 假设应用程序有一个主屏幕小部件。
  2. 当按下主屏幕小部件的组件时执行以下代码。

Intent i = new Intent(context, NoteListAppWidgetConfigureFragmentActivity.class);
// Avoid crash in Android 6.
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
i.putExtra(NoteListAppWidgetConfigureFragmentActivity.INTENT_EXTRA_NOTE_LIST_CONFIG, noteListConfig);
context.startActivity(i);
  1. 按返回按钮退出主页小部件启动的 Activity。
  2. 点击应用图标再次启动应用。
  3. 按后退按钮退出应用程序。我们注意到 DefaultLifecycleObserveronPause 没有被调用。

androidx.lifecycle.DefaultLifecycleObserver 是否有可靠的方法来检测应用程序退出事件?

最佳答案

这是因为在主屏幕小部件的配置 Activity 中,我们调用了 super.onPause 两次。这使得 DefaultLifecycleObserver 变得异常紧张。

public class StickyNoteAppWidgetConfigureFragmentActivity extends AppCompatActivity {

@Override
public void onPause() {
super.onPause();

// ...
// ...
// ...

super.onPause();
}
}

我们只是通过删除额外的 super.onPause() 调用来修复它。

public class StickyNoteAppWidgetConfigureFragmentActivity extends AppCompatActivity {

@Override
public void onPause() {
super.onPause();

// ...
// ...
// ...
}
}

关于android - androidx.lifecycle.DefaultLifecycleObserver 是否有可靠的方法来检测应用程序退出事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55985018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com