2011-08-05 4 views
0

android 갤러리에서 이미지를 제거하거나 재활용 하시겠습니까? 가능한가?android 갤러리에서 이미지를 제거하거나 재활용 하시겠습니까? 가능한가?

어떻게하면됩니까?

private void exit() { 
    g.setAdapter(null); 

    for (int i=0; i< imgadapter.images.size(); i++) { 
     if (imgadapter.images.get(i)!=null) { 
      imgadapter.images.get(i).recycle(); 
      imgadapter.images.set(i, null); 
     } 
    } 
    imgadapter.images.clear(); 
    System.gc(); 
} 


08-05 09:09:19.671: ERROR/AndroidRuntime(1279): java.lang.NullPointerException 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.widget.Gallery.makeAndAddView(Gallery.java:748) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.widget.Gallery.layout(Gallery.java:625) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.widget.Gallery.onLayout(Gallery.java:339) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.view.View.layout(View.java:7228) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.view.View.layout(View.java:7228) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.view.View.layout(View.java:7228) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.view.View.layout(View.java:7228) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1145) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1865) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.os.Looper.loop(Looper.java:130) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at java.lang.reflect.Method.invoke(Method.java:507) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
08-05 09:09:19.671: ERROR/AndroidRuntime(1279):  at dalvik.system.NativeStart.main(Native Method) 

답변

2

그것은 아마도 카펫 폭탄 어댑터에 좋은 생각이 아니다과 관계없이 아직 사용의 여부, 모든 것을 삭제 :

나는이 시도 (g 내 갤러리보기이다). recycle은 무자비하며 아직 사용중인 경우에도 비트 맵을 삭제합니다.

갤러리를 사용하고 있으므로 Android 용 내장형 재활용 메커니즘을 사용합니다.

Adapter.getViewView 매개 변수를 취하는 방법을 참조하십시오. 그것이 null이 아니라면 이전보기를 재활용하고있는 것입니다. 비트 맵을 오래된보기에서 가져 와서 더 이상 사용하지 않을 것입니다! 그것을 재사용 할 수있는 완벽한 장소입니다. 그런 다음 해당 뷰를 사용하여 새 뷰를 생성하지 않고 뷰를 다시 채울 수 있습니다.

+1

Android 갤러리 클래스의 재활용 코드가 깨졌습니다. 그들이 그것을 고쳤는지 확실하지 않지만 eclair에서 여전히 깨져 있습니다. http://code.google.com/p/android/issues/detail?id=3376 – satur9nine

+0

ICS에서 여전히 깨진 것처럼 보입니다. –

관련 문제