preference는 프로그램의 설정 정보를 영구적으로 저장하는 용도
응용프로그램내에 액티비티간에공유하고 수정시 다른액티비티에서도 수정된 값 읽음
핸도폰에만 적용되는 설정(알림 등)에 사용됨
xml포맷의 텍스트파일에 키-값 세트로 정보를 저장하게 된다.
getSharedPreferences
getpreferences
주로 getSharedPreferences
를 사용
Device File Explorer -> data -> data -> 프로젝트이름의 파일(ex. com.android.ex10_1_preference) -> shared_prefs 파일 -> pref.xml
적용안됐을때 - data파일 우클릭 -> Synchroize
예제
package com.android.preference
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.android.preference.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.btnSave.setOnClickListener{
saveData()
Toast.makeText(this, "Data Saved.", Toast.LENGTH_SHORT).show()
}
loadData()
}
private fun saveData() {
val pref = getSharedPreferences("pref",0)
val edit = pref.edit() // 수정 모드
// 1번째 인자는 키, 2번째 인자는 실제 담아둘 값
edit.putString("name", binding.etHello.text.toString())
edit.apply() // 저장완료
}
private fun loadData() {
val pref = getSharedPreferences("pref",0)
// 1번째 인자는 키, 2번째 인자는 데이터가 존재하지 않을경우의 값
binding.etHello.setText(pref.getString("name",""))
}
}
원래 기존의 레이아웃(Linear, RelativeLayout)들로 레이아웃을 만들때 중첩을 많이 시킬 수 밖에 없어 깊이가 깊어져 성능적 하락이 있었다. 그래서 constraint를 만들어 위젯들을 flat하게 만들수 있게 했는데 constraint로 레이아웃을 제작할때 constraint의 중첩이일어나면 똑같이 성능의 하락이일어나나? 그러면 constraint도 최대한 중첩을 지양해야 할까?