0

我有一个包含图像的特定片段。单击图像时,我会放大图像并将其显示在带有某些标题的对话框中。

这一切都很好。

在使用 DDMS 时,我看到在打开对话框时堆内存增加了约 4Mb,而在关闭时未释放。

因此这样做几次会占用巨大的堆内存。

public class ImageOnClickListener implements OnClickListener {
    String article_title ;
    String article_url;

    public ImageOnClickListener(String imageUrl, String title) {
        article_title = title;
        article_url = imageUrl;
    }
    @Override
    public void onClick(View v) {
        View layout = null;
        AlertDialog.Builder imageDialog = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layout = inflater.inflate(R.layout.image_fragment, null);

        TextView articleTitle = (TextView)layout.findViewById(R.id.image_title);
        articleTitle.setText(article_title);
        articleTitle.setTextSize(MainActivity.fontSize +10);
        articleTitle.setTextColor(getResources().getColor(
                android.R.color.white));

        URL imageUri = null;
        try {
            imageUri = new URL(article_url);
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }
        Bitmap bitmapImage = null;
        try {
            bitmapImage = BitmapFactory.decodeStream(imageUri.openConnection().getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        int width = display.getWidth();  // deprecated
        int height = display.getHeight();  

        int w = (int) (width*0.8);
        int h = (int) (height*0.8);

        ImageView imageObject = (ImageView)layout.findViewById(R.id.image_main);
        int imgWidth = bitmapImage.getWidth();
        int imgHeight = bitmapImage.getHeight();
        int ratio = w/imgWidth;

        Bitmap.createScaledBitmap(bitmapImage, imgWidth*ratio,imgHeight*ratio, true);
        imageObject.setImageBitmap(bitmapImage);

        RelativeLayout.LayoutParams imageParams = new RelativeLayout.LayoutParams(w,h);
        imageObject.setLayoutParams(imageParams);

        alertDialog = imageDialog.setView(layout).create();
        int dialogWidth = (int) (width*0.9);
        int dialogHeight = (int) (height*0.9);
        alertDialog.show();
        alertDialog.getWindow().setLayout(dialogWidth,dialogHeight);


    }
}

基本上我正在寻找一种方法来释放对话框关闭时的内存。

4

0 回答 0