0

SD フォルダーの画像を表示するグリッド レイアウトのアクティビティがあります。フォルダーを選択すると、すべての画像が文字列リストに追加され (フォルダーが変更されると消去されます)、画像の構築は getView() メソッドで行われ、リストからこれらの文字列が使用されます。

5 ~ 6 回は正常に動作しますが (フォルダーの画像が表示されます)、その後フォルダーを変更すると、カスタム BaseAdapter からの getView() で「outofmemoryerror」が発生します (コード行を参照)。私の漏れの問題...

画像はそれぞれ 30 ~ 100 kB です。

これはコードです:

private ArrayList<String> itemList = new ArrayList<String>();

...

public void add(String path) {
    itemList.add(path); 
}

public void clean() {
    itemList.clear();
}

public View getView(int position, View convertView, ViewGroup parent)
{   
    ImageView imageView;
    if (convertView == null)
    {
        int iImageSize = mContext.getResources().getInteger(R.integer.grid_image_size);
        int iImagePadding = mContext.getResources().getInteger(R.integer.grid_image_padding);

        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(iImageSize, iImageSize));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(iImagePadding,iImagePadding,iImagePadding,iImagePadding);
    } 
    else
        imageView = (ImageView) convertView;

    String sImagePath = itemList.get(position);
    imageView.setTag(sImagePath);
    imageView.setImageURI(Uri.parse(sImagePath)); // Crash HERE

    return imageView;
}

トレース ログ:

04-21 10:10:50.697: E/art(1665): OutOfMemoryError を投げる

04-21 10:11:31.208: E/AndroidRuntime(1665): 致命的な例外: メイン 04-21 10:11:31.208: E/AndroidRuntime(1665): プロセス: com.apps.apppictos、PID: 1665 04-21 10:11:31.208: E/AndroidRuntime(1665): java.lang.OutOfMemoryError: OOM 04-21 10:11:31.208 まで、732188 の空きバイトと 715KB で 1000012 バイトの割り当てを割り当てることができませんでした: E/AndroidRuntime(1665): dalvik.system.VMRuntime.newNonMovableArray(ネイティブ メソッド) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.graphics.BitmapFactory.nativeDecodeStream(ネイティブ メソッド) 04-21 10:11:31.208: E /AndroidRuntime(1665): android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:635) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.graphics.BitmapFactory.decodeStream(BitmapFactory.java: 611) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.graphics で。BitmapFactory.decodeFile(BitmapFactory.java:391) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:417) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.graphics.drawable.Drawable.createFromPath(Drawable.java:1143) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.ImageView.resolveUri(ImageView) .java:782) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.ImageView.setImageURI(ImageView.java:429) 04-21 10:11:31.208: E/AndroidRuntime(1665) ): com.apps.apppictos.ImageAdapter.getView(ImageAdapter.java:93) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.AbsListView.obtainView(AbsListView.java:2347) で04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.GridView.makeAndAddView(GridView.java:1433) 04-21 10:11:31.208:E/AndroidRuntime(1665): android.widget.GridView.makeRow(GridView.java:361) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.GridView.fillDown(GridView.java で:302) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.GridView.fillSpecific(GridView.java:582) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.GridView.layoutChildren(GridView.java:1287) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.AbsListView.onLayout(AbsListView.java:2151) 04-21 10 :11:31.208: E/AndroidRuntime(1665): android.view.View.layout(View.java:15671) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.ViewGroup で。レイアウト(ViewGroup.java:5038) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 04-21 10:11:31.208:E/AndroidRuntime(1665): android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.LinearLayout.onLayout(LinearLayout.java) :1466) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.View.layout(View.java:15671) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.ViewGroup.layout(ViewGroup.java:5038) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 04-21 10 :11:31.208: E/AndroidRuntime(1665): android.widget.FrameLayout.onLayout(FrameLayout.java:514) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.View.レイアウト (View.java:15671) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.ViewGroup.layout(ViewGroup.java:5038) 04-21 10:11:31.208:E/AndroidRuntime(1665): android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.LinearLayout.layoutVertical(LinearLayout.java) :1557) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.View.layout(View.java:15671) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.ViewGroup.layout(ViewGroup.java:5038) 04-21 10 :11:31.208: E/AndroidRuntime(1665): android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.widget.FrameLayout. onLayout(FrameLayout.java:514) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.View.layout(View.java:15671) 04-21 10:11:31.208:E/AndroidRuntime(1665): android.view.ViewGroup.layout(ViewGroup.java:5038) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.ViewRootImpl.performLayout(ViewRootImpl.java) :2086) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1843) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) 04- 21 10:11:31.208: E/AndroidRuntime(1665): android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 04-21 10:11:31.208: E/AndroidRuntime(1665): Android で。 view.Choreographer.doCallbacks(Choreographer.java:580) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view で。Choreographer.doFrame(Choreographer.java:550) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 04-21 10:11: 31.208: E/AndroidRuntime(1665): android.os.Handler.handleCallback(Handler.java:739) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.os.Handler.dispatchMessage(Handler) .java:95) 04-21 10:11:31.208: E/AndroidRuntime(1665): android.os.Looper.loop(Looper.java:135) 04-21 10:11:31.208: E/AndroidRuntime(1665) ): android.app.ActivityThread.main(ActivityThread.java:5257) 04-21 10:11:31.208: E/AndroidRuntime(1665): java.lang.reflect.Method.invoke(Native Method) 04-21 で10:11:31.208: E/AndroidRuntime(1665): java.lang.reflect.Method.invoke(Method.java:372) 04-21 10:11:31.208: E/AndroidRuntime(1665): com.android で.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 04-21 10:11:31.208: E/AndroidRuntime(1665): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 04-21 10:11:39.427: I/art(1665): ターゲット GC ヒープを 49MB から 48MB にクランプ

4

2 に答える 2

-1

これは、誰かが CustomView を次のようにインフレートしたときにも発生します。

inflate(getContext, R.layout.my_custom_view_layout, this)

それ以外の:

inflate(getContext, R.layout.my_custom_view_layout, null)

于 2016-03-06T09:57:12.163 に答える