본문 바로가기

아옳옳의 코딩공부/아옳옳의 안드로이드스튜디오

2021-03-11 안드로이드 스튜디오(액티비티 생명주기)

반응형

어제 공부한 액티비티 생명주기에 이어서 보자~ 

 

 

어제 보았던 생명주기에서 퍼지상태가 Pause 상태가 되면 잠시정지 상태가 된다고 배웠다 

그때에 너무 많은 메모리를 사용할경우 지금 사용하는 액티비티가 더 중요하기 때문에 뒤로 Pause상태인 액티비티의 데이터가 손상될수 있기 때문에 그것을 방지하고자 데이터를 따로 저장 해줄수 있다 

그게 바로 아래의 코드 이다 

 

데이터 저장하는 메소드 

public void saveData(){ // 데이터를 저장하는 메소드                          읽기전용인지 읽고쓰고 다른곳에서도 사용할것인지
        SharedPreferences sharedPreferences = getSharedPreferences("pref" , MODE_PRIVATE); // 데이터 저장하는것
        SharedPreferences.Editor editor = sharedPreferences.edit(); //          이 앱에서만 사용할것인지
        editor.putInt("Score" , 10000);
        editor.putString("msg", "나는데이터"); // 번들형 키와 값
        editor.commit(); // 완료했다는 것!
        // 이 메소드 호출 시점에 비정상적인 종료가 되어도 저장이 된다
    }

    private void restoreData(){  //확인을위한 메소드 
         Toast.makeText(getApplicationContext(),"읽어온 점수" + score , Toast.LENGTH_LONG).show();
        //확인을 위한 토스트 메시지
    }

MODE_WORLD_READABLE   :  다른프로젝트에서 읽기만 사용가능 

MODE_WORLD_WRITEABLE  :  다른프로젝트에서 읽고 쓰기 사용가능

MODE_PRIVATE                 :   현재의 액티비티 안에서 만사용하기 

 

생명주기에 메소드 호출하여 저장과 가져오기

@Override
    protected void onResume() {
        super.onResume();
        Log.i("LifeCycle", "onResume 호출됨");
        SharedPreferences sharedPreferences = getSharedPreferences("pref" , MODE_PRIVATE);
        score =sharedPreferences.getInt("Score" , 0); // 데이터 불러오기 
        if (score != 0 ) {restoreData();}
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("LifeCycle", "onPause 호출됨");
        saveData();
    }

 

근데 이렇게만하면 다시 켰을때 값이 남아 있을수 있다 그래서 초기화 시켜줄수도 있는데 Destroy 이렇게 초기하 시켜줌

@Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("LifeCycle", "onDestroy 호출됨");
        SharedPreferences sharedPreferences = getSharedPreferences("pref" , MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.clear();
        editor.commit(); // 값을 초기화 하는 것
    }

이렇게 해주면 프로그램이 끝낫을때 값이 초기화 되는걸 볼수있다! 

 

 

혹은 이렇게도 할수 있다 onSvaeInstanceState() , onRestoreInstanceState();

onSvaeInstanceState()를 오버라이딩 해서 값을 저장 한다

불러올때는 2가지 방법이 있는데 onCreate에서 불러오기 혹은

onRestoreInstanceState(); 오버라이딩해서 값을 불러올수 있다 

(현재 이상하게 코드상에 문제가 없지만 작동을 안한다 그전까지는 위에꺼 사용해야할거 같다 ) 

 

한눈에 보는 액티비티 생명주기 

 

 

2021-03-15 ( 복습 1회) 

반응형