首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持对象onPause()

保持对象onPause()
EN

Stack Overflow用户
提问于 2018-09-19 11:56:58
回答 2查看 219关注 0票数 0

我在Android片段上遇到了很多麻烦,我不知道为什么。

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

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

问题是,我不能用onSaveInstanceState()来保存它们。它们是对象,而不是原语。它们也来自库,所以我不能让它们实现可序列化或可Parcelable。

我想找出一种解决办法,而不诉诸:

代码语言:javascript
复制
android:configChanges="orientation|screenSize">

对我的活动,因为这被认为是不好的做法。而且,当您暂停并继续应用程序时,它也不起作用。

我也试过

代码语言:javascript
复制
this.setRetainInstance(true); // retain this fragment

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

经过多次试验、错误和测试,我发现我的片段的onSaveInstanceState()甚至没有运行。我甚至不能保持一个简单的布尔每当我暂停并继续应用程序。

我读到:

使用Save实例状态保存Android活动状态

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

savedInstanceState总是空的。

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

我的一些代码:

创建片段:

代码语言:javascript
复制
    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);

试图在实例状态保存一个简单的布尔值(记住:这甚至没有运行):

代码语言:javascript
复制
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);

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

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

并试图装载它:

代码语言:javascript
复制
@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);
}

我遗漏了什么?很明显我不明白什么。为什么当你暂停应用程序时很难保留价值呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-19 14:30:20

我建议按照架构组件使用一个MapView层来存储ViewModel层。如果这不是一个选项,则可以使用活动getLastNonConfigurationInstance手动存储和检索对象。

票数 1
EN

Stack Overflow用户

发布于 2018-09-19 14:11:31

代码语言:javascript
复制
 @Override
    public void onPause() {
        /**
         * store your data 

         */

        super.onPause();
    }

    @Override
    public void onResume() {
        /**
         * retrieve your data       
         */



        super.onResume();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52405345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档