我应该从 onCreate 或 onResume 中的 sharedpreferences 加载值吗?

Should i load values from sharedpreferences in onCreate or onResume?

我将 textview 值存储在 sharedpreferences 中,但我不确定是否将它们加载到 oncreate 或 onresume 中?

我想在用户关闭应用程序然后再次打开时再次显示这些值。

StorageUtil 是一个 class 管理我的共享首选项的工具。

我想将搜索栏值存储在 sharedpreferences 中。

搜索栏值

  mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            StorageUtil storageUtil = new StorageUtil(getApplicationContext());
            if (mediaPlayer != null && fromUser){
                lastSeekbarPos = progress;
                mSeekbarProgress = progress * 1000;
                mediaPlayer.seekTo(mSeekbarProgress);
            }
            //Store last SeekBar position in mSharedPreferences
            storageUtil.storeSeekbarProgress(lastSeekbarPos);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    });

  songList = storageUtil.getSongs();
  songIndex = storageUtil.loadSongIndex();
  lastSeekbarPos = storageUtil.loadSeekbarProgress();

  if (songList != null && !songList.isEmpty() && songIndex != -1){
        lastSeekbarPos = storageUtil.loadSeekbarProgress();

        tvSongTitle.setText(songList.get(songIndex).getTitle());
        tvArtistName.setText(songList.get(songIndex).getArtist());
        mSeekbar.setProgress(lastSeekbarPos);
        loadAlbumArt();
        loadAlbumArtBottom();
        Log.i(TAG, "Data found in mSharedPreferences");
    }else{
        mSlideUpPanel.setPanelState(SlidingUpPanelLayout.PanelState.HIDDEN);
        tvSongTitle.setText("");
        tvArtistName.setText("");
    }

StorageUtil

public class StorageUtil {
  private final String STORAGE = "com.vince_mp3player.STORAGE";
  private SharedPreferences mSharedPreferences;
  private Context context;
  private SharedPreferences.Editor mEditor;

public StorageUtil(Context context){
    this.context = context;
}

public void storeSeekbarProgress(int seekbarprogress) {
    mSharedPreferences = context.getSharedPreferences(STORAGE, Context.MODE_PRIVATE);
    mEditor = mSharedPreferences.edit();
    mEditor.putInt("seekbarProgress", seekbarprogress);
    mEditor.apply();
}

public int loadSeekbarProgress() {
    mSharedPreferences = context.getSharedPreferences(STORAGE, Context.MODE_PRIVATE);
    return mSharedPreferences.getInt("seekbarProgress", -1);//return -1 if no data found
  }
}

两者都应该有效。

onCreate() 在 Activity 完全完成时调用,即您从“最近”关闭应用程序。

onResume() 也会在 onCreate() 之后立即调用,以及任何时候 Activity 重新进入前台,即回家然后从“最近”打开应用程序。