gpt4 book ai didi

java - 使对象保持 onPause()

转载 作者:行者123 更新时间:2023-12-02 10:47:56 25 4
gpt4 key购买 nike

我在使用 Android Fragment 时遇到很多问题,但我不知道为什么。

每当我暂停应用程序 (onPause()) 时,我想在内存中保留一个对象。

我有一个带有一些图层的 MapView。我想保留这些图层,这样每当我暂停和恢复应用程序时, map 就不必从头开始重新加载并重新创建它们。

问题是,我无法使用 onSaveInstanceState() 保存它们。它们是对象,而不是基元。它们也来自库,因此我无法让它们实现 Serialized 或 Parcelable。

我想找到一个解决方案而不诉诸:

android:configChanges="orientation|screenSize">

我的 Activity ,因为这被认为是不好的做法。此外,当您暂停和恢复应用程序时,它不起作用。

我也尝试过

this.setRetainInstance(true); // retain this fragment

在我的 fragment 的 onCreate() 上,但我也想避免它。反正也没用。

经过多次尝试、错误和测试,我发现我的 fragment 的 onSaveInstanceState() 甚至没有运行。每当我暂停和恢复应用程序时,我什至无法保留一个简单的 boolean 值。

我读到:

Saving Android Activity state using Save Instance State

https://developer.android.com/training/basics/activity-lifecycle/recreating

savedInstanceState is always null

还有许多其他帖子,当然还有 Android 文档。

我的一些代码:

创建 fragment :

    navFragment = FragNavigation.newInstance(); // keeping the reference to the navFragment

// setting up the viewpager
ViewPager viewPager = findViewById(R.id.vpMainViewPager);
MainPagerAdapter mainAdapter = new MainPagerAdapter(getSupportFragmentManager(), this);
mainAdapter.addFragment(navFragment);
viewPager.setAdapter(mainAdapter);

尝试在实例状态中保存一个简单的 boolean 值(记住:这甚至不会运行):

@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);

Log.e(TAG, "onSaveInstanceState: is map loaded? " + mapIsLoaded );

outState.putBoolean("mapIsLoaded", mapIsLoaded);
}

并尝试加载它:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setRetainInstance(true); // retain this fragment

Log.e(TAG, "onCreate: null? " + (savedInstanceState == null) );

if (savedInstanceState != null)
mapIsLoaded = savedInstanceState.getBoolean("mapIsLoaded", false);
}

我错过了什么?我显然不明白一些事情。为什么暂停应用程序时很难保留值?

最佳答案

我建议使用 ViewModel 存储 MapView 图层根据架构组件。如果这不是一个选项,您可以使用“Activity ”getLastNonConfigurationInstance 手动存储和检索对象。 .

关于java - 使对象保持 onPause(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52405345/

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