2013-06-06 2 views
2

설치된 모든 애플리케이션을로드하는 앱을 만들었습니다. 지금은 괜찮아. 그러나 많은 응용 프로그램이있는 일부 휴대 전화/태블릿에서는 메모리 부족으로 인해 앱이 다운됩니다. 다음은 소스 코드의 메모리가 부족하지 않도록 위의 코드 최적화 할 수있는 방법이 있나요 응용 프로그램 정보많은 앱 아이콘을 가져 오면 메모리가 부족합니다.

String appName = p.applicationInfo.loadLabel(packageManager).toString(); 
        String packageName = p.packageName; 
        String appFile = a.sourceDir; 
        long lastUpdated = new File(appFile).lastModified(); 
        Drawable icon = a.loadIcon(packageManager); 
        AppSize appSize = calculateSize(p.applicationInfo.sourceDir); 
        App application = new App(appName, packageName, lastUpdated, appSize.getSize(), appSize.getLongSize(), icon, false); 

얻을 수 있습니다? 감사합니다.

답변

3

Displaying bitmaps efficiently 링크를 참조하십시오.

또한이 오픈 소스 라이브러리 프로젝트에서 : Universal Image loader.

응용 프로그램이 많은 비트 맵을 표시해야하는 경우 할당 된 응용 프로그램 메모리를 초과합니다. 또한 격자, 목록 또는보기 페이저에 표시 될 때 각보기를 만드는 동안 더 많은 메모리가 사용됩니다. 따라서 메모리 나 디스크에있는 이미지를 캐싱하고 해당 링크에 설명 된 기술을 사용하여 효율적으로 표시해야합니다.

추가 이것 좀 봐 : Get installed Applications with Name, Package Name, Version and Icon

허용 URI의 예를 UIL을 위해 :

String imageUri = "http://site.com/image.png"; // from Web 
String imageUri = "file:///mnt/sdcard/image.png"; // from SD card 
String imageUri = "content://media/external/audio/albumart/13"; // from content provider 
String imageUri = "assets://image.png"; // from assets 
String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch) 
+0

내가 유니버설 이미지 로더를 사용하려고했습니다. 하지만 내 응용 프로그램은 장치 (다른 응용 프로그램의 아이콘)에서 아이콘을 얻었으므로 Uri 매개 변수를 displayImage() 메서드에 전달하는 방법을 모르겠습니다. 너는 어떤 생각을 가지고 있니? –

+0

업데이트 된 답변 확인. 그 코드 스 니펫을 사용하여 응용 프로그램 아이콘을 GridView에로드 할 수있었습니다. 하지만 UIL을 사용하지 않았습니다. setImageDrawable()을 사용하여 직접로드했습니다. 나는 Drawbles 아이콘을 얻을 수 있었기 때문에. 많은 앱이 설치되지 않았으므로 OOM 문제가 발생하지 않았습니다. 아이콘의 경로를 얻을 수 있다면 (가능하지 않다면) file : /// 다음에 path를 사용하여 UIL의 imageView.displayImage() 메소드에 전달하면됩니다. 귀하의 문제에 대한 UIL을 사용하여 작업 솔루션을 생각해 내면 대답을 업데이트 할 것입니다. – SKK

+0

감사합니다! 내 문제는 URL을 가져 와서 displayImage() 메서드에 전달하는 방법을 모르겠다. 어떻게하는지 아십니까? –

관련 문제