gpt4 book ai didi

java - 处理显示尺寸变化

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:52 25 4
gpt4 key购买 nike

我正在将我的应用目标 SDK 版本迁移到 android oreo。

其中一项可能会影响应用程序的更改是,如果设备的显示尺寸发生变化,则针对 Android Nougat 及更高版本的应用程序将收到通知,就像设备方向发生变化一样。以下是来源。

When the device density changes, the system notifies running apps in the following ways:

If an app targets API level 23 or lower, the system automatically kills all its background processes. This means that if a user switches away from such an app to open the Settings screen and changes the Display size setting, the system kills the app in the same manner that it would in a low-memory situation. If the app has any foreground processes, the system notifies those processes of the configuration change as described in Handling Runtime Changes, just as if the device's orientation had changed. If an app targets Android 7.0, all of its processes (foreground and background) are notified of the configuration change as described in Handling Runtime Changes.

现在我的应用程序有一个长时间运行的进程,它在 Android Activity 的异步 TSak 中运行。这意味着该应用程序在 Activity 代码中有一个 AsyncTask。

我在异步任务开始时创建了一个对话框,并在异步任务完成其工作后将其隐藏。

现在假设用户启动任务然后转到设置并更改显示大小然后返回到我的应用程序然后应用程序的对话框消失异步任务仍然执行到最后这意味着用户可能认为应用程序已完成任务,但实际上应用程序会执行任务。但是我的 Activity 也像重新启动一样响应,除了 Async Task 正在运行。

我的应用的方向锁定为纵向。

我应该如何处理这种情况?任何帮助表示赞赏。谢谢!

编辑:这是场景

1) 应用启动

2) 主屏幕

3) 用户按下一个按钮

4) 主屏幕内的 AsyncTask 已启动

5) 显示任务进度的对话框

6) 用户最小化应用程序并转到设置

7) 更改显示大小/密度或更改设备的字体大小

8) 我的应用程序被操作系统调用,就像设备旋转发生变化一样

9) 然后用户返回应用

10) 但是显示的对话框不再显示

11) 但是异步任务在后台运行并且仍在执行它的任务

12) 任务确实完成了,但用户认为任务还没有完成。

最佳答案

在您的 on_resume() 方法中验证屏幕大小和字体大小没有改变。如果他们有,请适本地调整、删除和重新创建您的对话框。这类似于在暂停时处理方向更改(添加字体大小作为条件)。

编辑:

android:configChanges="fontScale|density" 添加到您的 list 文件中。

static int fontScale = 1;
static int densityDpi = 0;

public void onConfigurationChanged(Configuration newConfig) {
if (newConfig.fontScale != fontScale) {
// destroy and recreate dialog adjusting for font size.
fontScale = newConfig.fontScale;
}
if (newConfig.densityDpi != densityDpi) {
// destroy and recreate dialog adjusting for new screen size.
densityDpi = newConfig.densityDpi;
}
}

为异步任务使用通知可能会更好,因为它们不受配置更改的影响,并且不会在内存不足的情况下终止。

关于java - 处理显示尺寸变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53867253/

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