본문 바로가기

나의 플랫폼/안드로이드

[ Android ] 메모리 누스 (memory leak)

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

발생 원인!!


이미지 버튼만 4개를 만든 페이지에서 계속 메모리 누수가 발생하여... 4~5번 실행하면 실행이 되지 않고

오버 플로우가 발생!!!!


메모리가 누수되었을 경우 확인 부분


1. 전역변수나 클래스로 불러온 bitmap을 recycle함수로 초기화 시켰는지 확인

2. Context는 되도록 applicationContext를 사용하도록

3. 바로 이걸 하세요!!

/*

 * Copyright (C) 2010 The Android Open Source Project

 *

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *      http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */

 

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.ImageView;

 

/**

 * @author givenjazz

 *

 */

public class RecycleUtils {

       

    private RecycleUtils(){};

 

    public static void recursiveRecycle(View root) {

        if (root == null)

            return;

        root.setBackgroundDrawable(null);

        if (root instanceof ViewGroup) {

            ViewGroup group = (ViewGroup)root;

            int count = group.getChildCount();

            for (int i = 0; i < count; i++) {

                recursiveRecycle(group.getChildAt(i));

            }

 

            if (!(root instanceof AdapterView)) {

                group.removeAllViews();

            }


        }

        if (root instanceof ImageView) {

            ((ImageView)root).setImageDrawable(null);

        }

        root = null;

 

        return;

    }

}



화면에 남겨 있는 view들을 찾아 모두 초기화 시켜주는 클래스 입니다.!!

참조 : http://givenjazz.tistory.com/48


사용법은 

@Override

protected void onDestroy() {

RecycleUtils.recursiveRecycle(getWindow().getDecorView());

System.gc();

super.onDestroy();

}

Destroy함수에 추가만 해주세요!!!!!


위 클래스 정말 효율적입니다.^^ 


바로써보시길~


그럼 즐 코딩~