gpt4 book ai didi

android - 我可以检测 Android 是否已从 Notification Intent/PendingIntent 中终止应用程序(任务进程)吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:48 25 4
gpt4 key购买 nike

Android 操作系统会在内存不足时终止进程。场景:Android 终止了应用程序进程,我通过 Android 启动器或最近任务列表(长按主页按钮)重新打开它。我可以使用以下方法检查 Android 是否在最近查看的 Activity 的 onCreate() 方法中终止了我的应用进程:

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);

if (savedInstanceState != null) {
// Re-initialise things that killing the app would have destroyed
}
}

但是,如果 Android 终止了应用程序进程并且我使用打包在 PendingIntent 中的 Intent 通过通知重新打开它,我不知道如何确定应用程序进程是否被 Android 终止。随后我不会重新初始化杀死应用程序进程会破坏的东西。

有没有办法确定 Android 在从通知打开新 Activity 时是否终止了应用程序进程?

我找到了一个解决这个问题的 hacky 解决方案。使用:Android: always launch top activity when clicked on notification如果 Android 终止了应用程序进程并处理重新初始化,我可以在传递了 savedInstanceState 的堆栈顶部打开 Activity 。然后每个 Activity 负责使用原始通知 Intent 中的 Extras 将用户重定向到适当的 Activity 。此场景的 Intent 设置如下:

Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

是否有我可以在 Intent 上设置的操作、类别或标志,以模拟重新打开应用进程,就像用户在新的 Intent/Activity 上完成的一样?

编辑: 澄清最后一个问题(尽管我对 Android 的婴儿理解似乎让我失望,所以它可能没有意义):是否有我可以设置的操作、类别或标志在 Intent 上,如上面的代码 fragment ,这将允许我确定应用程序进程是否已被操作系统终止?

最佳答案

判断Android是否杀掉进程再创建新进程最简单的方法如下:

在您的根 Activity (具有 ACTION=MAIN 和 CATEGORY=DEFAULT 的 Activity )中创建一个公共(public)静态 bool 变量,如下所示:

public static boolean initialized;

在根 Activity 的 onCreate() 中,将此变量设置为 true

在所有其他 Activity 的 onCreate() 中,您可以通过检查 bool 值的状态来检查 Android 是否已终止/重新创建任务,如果应用尚未初始化,您可以重定向到根 Activity 或调用初始化方法或其他任何...像这样:

if (!RootActivity.initialized) {
// Android has killed and recreated the process and launched this
// Activity. We need to reinitialize everything now
... redirect to root activity or call reinitialize method
}

关于android - 我可以检测 Android 是否已从 Notification Intent/PendingIntent 中终止应用程序(任务进程)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29701660/

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