亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

保持對象 onPause()

保持對象 onPause()

aluckdog 2021-09-29 10:14:24
我在使用 Android Fragments 時遇到了很多麻煩,我不知道為什么。每當我暫停應用程序(onPause())時,我都想在內存中保留一個對象。我有一個帶有一些圖層的 MapView。而且我想保留這些圖層,這樣每當我暫停和恢復應用程序時,地圖就不必從頭開始重新加載和重新創建它們。問題是,我無法使用 onSaveInstanceState() 保存它們。它們是對象,而不是基元。它們也來自一個庫,所以我不能讓它們實現 Serializable 或 Parcelable。我想在不訴諸于以下的情況下找到解決方案:android:configChanges="orientation|screenSize">到我的活動,因為它被認為是不好的做法。此外,它不適用于暫停和恢復應用程序時。我也試過this.setRetainInstance(true); // retain this fragment在我的片段的 onCreate() 上,但我也想避免它。無論如何都行不通。經過多次試驗、錯誤和測試,我發現我的片段的 onSaveInstanceState() 甚至沒有運行。每當我暫停和恢復應用程序時,我什至無法保留一個簡單的布爾值。我讀:使用 Save Instance State 保存 Android Activity 狀態https://developer.android.com/training/basics/activity-lifecycle/recreatingsavedInstanceState 始終為 nullAmog 許多其他帖子,當然還有 Android 文檔。我的一些代碼:創建片段:    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);試圖在實例狀態中保存一個簡單的布爾值(記?。哼@甚至不會運行):@Overridepublic void onSaveInstanceState(@NonNull Bundle outState) {    super.onSaveInstanceState(outState);    Log.e(TAG, "onSaveInstanceState: is map loaded? " + mapIsLoaded );    outState.putBoolean("mapIsLoaded", mapIsLoaded);}并嘗試加載它:@Overridepublic 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);}我錯過了什么?我顯然不明白什么。為什么暫停應用程序時很難保持值?
查看完整描述

2 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

我建議根據架構組件使用ViewModel存儲 MapView 層。如果這不是一個選項,您可以使用活動getLastNonConfigurationInstance手動存儲和檢索對象。


查看完整回答
反對 回復 2021-09-29
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

 @Override

    public void onPause() {

        /**

         * store your data 


         */


        super.onPause();

    }


    @Override

    public void onResume() {

        /**

         * retrieve your data       

         */




        super.onResume();

    }


查看完整回答
反對 回復 2021-09-29
  • 2 回答
  • 0 關注
  • 249 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號