gpt4 book ai didi

android - 使用 getLastNonConfigurationInstance 恢复 Activity 状态会生成未经检查的强制转换警告

转载 作者:行者123 更新时间:2023-11-29 22:28:37 26 4
gpt4 key购买 nike

在我的 Activity 中,我想使用“onRetainNonConfigurationInstance”方法来存储我在 Activity 中加载的一些数据(无 View )。这应该会加快加载速度并在方向改变时保持一致的状态。

由于返回参数是单个对象,我想返回两个项目,所以我想出了以下解决方案:

@Override
public Object onRetainNonConfigurationInstance() {

HashMap< String, Object> data = new HashMap<String, Object>();

data.put( "mAdapter", getExpandableListAdapter() );
data.put( "folderList", folderList );

return data;

}

当我使用 onCreate 方法收集数据时:

HashMap<String, Object> savedData = ( HashMap< String, Object> ) getLastNonConfigurationInstance();

我从编译器收到未经检查的转换警告。我假设这是因为编译器无法确定具有指定类型的 HashMap 是否真的会在 getLastNonConfigurationInstance 返回的对象中。然后,我将 HashMap 中的对象转换为正确的数据类型。我的问题是:

当我知道数据将以 HashMap 的形式返回(因为我将它存储在那里)时,这是将多条数据传递回 onCreate Activity 的安全方法吗?

我想我可以使用@SuppressWarnings("unchecked") 来抑制警告,但我想确保我的代码有效。

亲切的问候,伊沃

最佳答案

当您在编译时知道完整的内容集时,为什么要使用 hashmap 而不是简单的类似结构的持有类?

此外,请注意在这样的 Activity 实例之间传递任何包含对上下文/Activity 的引用的内容。您传递的适配器很可能包含一个 Context 引用,以便它可以获得 LayoutInflater 来膨胀项目 View 。这将产生两个负面影响:

  • Activity 可能很大,卡在对已销毁的 Activity 的引用上会使垃圾收集器无法收集它。 (这就是人们在谈论泄漏上下文或 Activity 时的意思。)
  • 上下文包含屏幕方向和主题等配置信息。如果您在配置更改后将旧上下文重新用于诸如膨胀布局之类的事情,您最终将使用错误的配置数据。例如,如果您使用资源系统为纵向和横向模式提供不同的布局,这将无法正常工作。

这就是为什么该方法被称为“非配置实例”的原因。只有返回不受配置影响的对象才是正确的。在类似持有上下文的适配器的情况下,传递适配器访问的数据而不是适配器本身,并在新的 Activity 实例中创建一个新的适配器。

关于android - 使用 getLastNonConfigurationInstance 恢复 Activity 状态会生成未经检查的强制转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5093270/

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