-->

[Android / Java]

재귀 함수를 이용한 캐시 삭제

 

 

* 목표 : 재귀 함수를 이용해서 캐시를 삭제하고 메모리 관리를 하자.

 

전 시간에 만든 Camera Pad를 이용해 앱을 실행하다 보면 캐시 폴더에 이미지가 쌓인다.

일단 카메라 촬영을 하기 위해 임시로 File을 만들어 촬영한 내용 (Uri 혹은 Byte Code)을 담기 때문에 파일 생성은 필수 불가결하다.

그렇지만 캐시 폴더에 만들어놨기 때문에 사실상 언제 지워져도 괜찮은 상태!

따라서 캐시 폴더를 삭제하는 메서드를 만들어보자.

 

    //캐시삭제
    public boolean deleteCache(File dir) {

        try {
            //param File이 Null이 아니여야 하고 & 디렉토리인지 확인
            if (dir != null && dir.isDirectory()) {
                //디렉토리 내 파일 리스트 호출
                String[] children = dir.list();
                //파일 리스트를 반복문으로 호출
                for (String child : children) {
                    //파일 리스트중 디렉토리가 존재할 수 있기 때문에 재귀호출
                    boolean isSuccess = deleteCache(new File(dir, child));
                    if (!isSuccess) {
                        return false;
                    }
                }
            }
        } catch (Exception e) {
            Log.w(TAG, "deleteCache Error!", e);
        }

        return dir.delete();
    }

재귀 함수란 메서드 내에서 다시 호출하는 반복문 형태의 함수이다. 내가 원하는 파일 리스트를 뽑아내거나 몽땅 삭제를 원할 때 유용하게 이용된다. 캐시 삭제는 Activity의 onDestroy를 Overide 하면서 호출하면 될 것이다.

 

    @Override
    public void onDestroy() {
        super.onDestroy();
        deleteCache(getCacheDir());
        android.os.Process.killProcess(android.os.Process.myPid());
    }

 

앱은 종료해도 프로세스가 돌아가는 문제들이 있는데 finish()로도 안 통한다. 위처럼 프로세스 자체를 죽이면 앱이 종료될 때 캐시도 삭제하고 현재 진행되는 프로세스도 종료한다.

 

+ Recent posts