Android mientras usa la imagen de vista de tarjeta se carga muy flojo

Estoy cargando imágenes (por debajo de ~ 3 MB de tamaño) en Cardview desde una base de datos y fue infalte en Listviewstview.

La carga y exploración de estas imágenes es demasiado lenta.

¿Existe algún método para reducir estas imágenes para acelerar y a veces mostrar imágenes [duplicadas] en otra vista de tarjeta?

cardview xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/cv"
        android:layout_width="match_parent"
        android:layout_height="140dp"
        android:alpha="1"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        card_view:cardBackgroundColor="#FFFFFF"
        card_view:cardCornerRadius="10dp">

        <RelativeLayout
            android:id="@+id/r1"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <ImageView
                android:id="@+id/img_product"
                android:layout_width="90dp"
                android:layout_height="90dp"
                android:layout_marginLeft="@dimen/activity_vertical_margin"
                android:layout_marginTop="20dp" />

            <TextView
                android:id="@+id/product_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignTop="@+id/img_product"
                android:layout_toEndOf="@+id/img_product"
                android:layout_toRightOf="@+id/img_product"
                android:inputType="textMultiLine"
                android:text="Parvana Fancy Necklace Set"
                android:textSize="18dp"
                android:textStyle="bold" />


            <TextView
                android:id="@+id/txt_total"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/img_product"
                android:layout_toEndOf="@+id/img_product"
                android:layout_toRightOf="@+id/img_product"
                android:text="RS.234"
                android:textSize="20dp"
                android:textStyle="bold" />

            <Button
                android:id="@+id/btn_remove"
                android:layout_width="32dp"
                android:layout_height="wrap_content"
                android:background="@drawable/wishlistddelete_selector"
                android:drawableLeft="@drawable/delete_icon"
                android:layout_alignTop="@+id/txt_total"
                android:layout_alignParentRight="true"
                android:layout_alignParentEnd="true" />

        </RelativeLayout>
    </android.support.v7.widget.CardView>
</RelativeLayout>

listview xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/home_bground">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">

        <RelativeLayout
            android:id="@+id/topbar1"
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:background="@drawable/top">

            <ImageView
                android:id="@+id/btn_hme"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:src="@drawable/home_icon" />

            <TextView
                android:id="@+id/txt_pro_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:gravity="center_horizontal"
                android:text="Shopping Cart"
                android:textColor="#ffffff"
                android:textSize="18dp"
                android:textStyle="bold" />

        </RelativeLayout>

        <ListView
            android:id="@+id/list_item"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/topbar1"
            android:animationCache="false"
            android:dividerHeight="0dp"
            android:listSelector="#00000000"
            android:scrollingCache="false"
            android:smoothScrollbar="true" />
          </RelativeLayout>

</RelativeLayout>

mediante el uso de sqllite acceder a los datos de la base de datos

public class Wishlist extends Activity {
    Button checkout;
    ListView ListCart;
    String name, cusid, ffname, llname, phone, fax, password, email;
    String[] qu, s;
    int[] g;
    int k = 0;
    String cost;
    ProgressDialog pDialog = null;
    List<CartProducts> product_list;
    Context ctx;
    Integer pos = 0, total = 0, q = 0, gtot = 0, total1 = 0, sum = 0;
    SQLiteDatabase FavData;
    private Context context;
Integer i;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_modifywishlist);
        Intent page1 = getIntent();
        cusid = page1.getStringExtra("cus_id");
        ffname = page1.getStringExtra("fname");
        llname = page1.getStringExtra("lname");
        phone = page1.getStringExtra("ph");
        fax = page1.getStringExtra("fax");
        password = page1.getStringExtra("password");
        email = page1.getStringExtra("email");
        ListCart = (ListView) findViewById(R.id.list_item);
ListCart.setScrollingCacheEnabled(false);
        Intent page2 = getIntent();
        i  = page2.getIntExtra("kvalue",1);
        pDialog = new ProgressDialog(this);
        ctx = this;
        FavData = Wishlist.this.openOrCreateDatabase("SHOPPING_CARTFAV", MODE_PRIVATE, null);
        FavData.execSQL("CREATE TABLE IF NOT EXISTS fav_items(product_id varchar, name varchar, price varchar, quantity integer, model varchar, image varchar, manufacturer varchar )");
        ArrayList<CartProducts> myList = new ArrayList<CartProducts>();
        Cursor crsr = FavData.rawQuery("SELECT * FROM fav_items", null);
        final String[] productID = new String[crsr.getCount()];
        final String[] ProductName = new String[crsr.getCount()];
        final String[] ProductPrice = new String[crsr.getCount()];
        final String[] ProductQuantity = new String[crsr.getCount()];
        final String[] ProductModel = new String[crsr.getCount()];
        final String[] ProductImage = new String[crsr.getCount()];
        final String[] ProductManufacturer = new String[crsr.getCount()];
        int j = 0;

        while (crsr.moveToNext()) {
            String id = crsr.getString(crsr.getColumnIndex("product_id"));
            productID[j] = id;//product_id,name,price,quantity,model,image,manufacturer
            name = crsr.getString(crsr.getColumnIndex("name"));
            ProductName[j] = name;
            String price = crsr.getString(crsr.getColumnIndex("price"));
            ProductPrice[j] = price;
            String s = ProductPrice[j].toString();
            s = s.replace(",", "");
            String[] parts = s.split("\\."); // escape .
            String part1 = parts[0];
            String part2 = parts[1];
            part1 = part1.replace("₹", "");
            total = Integer.parseInt(part1); // Toast.makeText(Table.this, part1, Toast.LENGTH_SHORT).show();
            String qnty = crsr.getString(crsr.getColumnIndex("quantity"));
            ProductQuantity[j] = qnty;
            String s2 = ProductQuantity[j].toString();
            total1 = Integer.parseInt(s2);
            sum = total * total1;
            String model = crsr.getString(crsr.getColumnIndex("model"));
            ProductModel[j] = model;
            String image = crsr.getString(crsr.getColumnIndex("image"));
            ProductImage[j] = image;
            String manufacturer = crsr.getString(crsr.getColumnIndex("manufacturer"));
            ProductManufacturer[j] = manufacturer;
            myList.add(new CartProducts(productID[j], ProductName[j], ProductPrice[j], ProductQuantity[j], ProductModel[j], ProductImage[j], ProductManufacturer[j]));
            gtot = gtot + sum;
            j++;
        }
        ListCart.setAdapter(new Wishlist_Listadapter(ctx, R.layout.activity_wishlist_cartrow, myList));
        String s1 = ProductPrice.toString();

    }
}

clase de adaptador

public class Wishlist_Listadapter  extends ArrayAdapter<CartProducts> {
    Bitmap bitmap;
    ImageView img;
    String urll, name,totalps;
    SQLiteDatabase FavData;
    Integer total = 0, quanty = 1, grandtot = 0, i = 0;
    String it;
    Button addbtn, minbtn;
    EditText editqu;
    int total1 = 0, quantity=0, fulltotal = 0, sum;
    SQLiteOpenHelper dbhelper;
    Wishlist_Listadapter cart = Wishlist_Listadapter.this;
    private int resource;
    private LayoutInflater inflater;
    private Context context;
    int count=1 ;

    public Wishlist_Listadapter(Context ctx, int resourceId, List<CartProducts> objects) {
        super(ctx, resourceId, objects);
        resource = resourceId;
        inflater = LayoutInflater.from(ctx);
        context = ctx;
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        /* create a new view of my layout and inflate it in the row */
        convertView = (RelativeLayout) inflater.inflate(resource, null);

        final ViewHolder viewholder;
        viewholder = new ViewHolder();
        final CartProducts banqt = getItem(position);
        totalps=(banqt.getPrice());
        String s = totalps.toString();
        s = s.replace(",", "");
        String[] parts = s.split("\\."); // escape .
        String part1 = parts[0];
        String part2 = parts[1];
        part1 = part1.replace("₹", "");// Toast.makeText(getContext(), part1, Toast.LENGTH_LONG).show();
        total = Integer.parseInt(part1);


        quanty = Integer.parseInt(banqt.getQuantity());
        grandtot = total *quanty;
        viewholder.total = (TextView) convertView.findViewById(R.id.txt_total);
        viewholder.total.setText(String.valueOf(grandtot));
        Button delet = (Button) convertView.findViewById(R.id.btn_remove);
        delet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*delete function*/
                it = banqt.getProduct_id();
                FavData = context.openOrCreateDatabase("SHOPPING_CARTFAV", context.MODE_PRIVATE, null);
                FavData.execSQL("DELETE FROM fav_items WHERE product_id=" + it + ";");
                Intent intent = ((Wishlist) context).getIntent();
                ((Wishlist) context).finish();
                context.startActivity(intent);
            }
        });
        viewholder.txtName = (TextView) convertView.findViewById(R.id.product_name);
        viewholder.txtName.setText(banqt.getName());
        img = (ImageView) convertView.findViewById(R.id.img_product);
        urll = banqt.getImage().toString();
        urll = urll.replaceAll(" ", "%20");// Toast.makeText(getContext(),urll,Toast.LENGTH_LONG).show();
        new LoadImage().execute(urll);
        return convertView;
    }
    static class ViewHolder {
        TextView txtName;
        TextView total;
        EditText editqu;
        TextView txtprice;
    }
    private class LoadImage extends AsyncTask<String, String, Bitmap> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        protected Bitmap doInBackground(String... args) {
            try {
                bitmap = BitmapFactory.decodeStream((InputStream) new URL(args[0]).getContent());
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bitmap;
        }

        protected void onPostExecute(Bitmap image) {
            if (image != null) {
                img.setImageBitmap(image);
                //    pDialog.dismiss();
            } else {
                //  pDialog.dismiss();
                Toast.makeText(getContext(), "Image Does Not exist or Network Error", Toast.LENGTH_SHORT).show();
            }
        }
    }
} 

Respuestas a la pregunta(1)

Su respuesta a la pregunta