Проблема с оптимизацией приложения
приложение на Java с использованием Firebase,RecyclerView проблема заключается в том что приложение используем слишком много оперативной памяти(500-550мб).
Скрин из профайлера

думаю проблема в этом фрагменте
public class HomeFragment extends Fragment {
private DatabaseReference proverka;
private DatabaseReference otzyvRef;
private DatabaseReference prover;
private int testintTwo;
private TextView textesti;
private Double itog;
private Double itogt;
private Double otztvValues;
private Double otztvValuestwo;
private DatabaseReference otzest;
private int testint;
private String saveCurrentDate, saveCurrentTime, ProductRandomKey;
private DatabaseReference getmyNameRef;
private FirebaseAuth mAuth;
private RecyclerView HorizontalRec;
private FirebaseRecyclerAdapter<ShopAdapter, VerticalShopHolder> VerticalAdapter;
private FirebaseRecyclerAdapter<ShopAdapter, HorizontalShopHolder> horizAdapter;
private DatabaseReference shops;
private RecyclerView recAptek;
private DatabaseReference shopipht;
private ValueEventListener refTwoRaw;
private Dialog dialog;
private final HashMap<Query, ValueEventListener> listenersTwo = new HashMap<>();
private final HashMap<Query, ValueEventListener> listeners = new HashMap<>();
public HomeFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_home, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
otzyvRef = reference.child("otzyv");
getmyNameRef = reference.child("client");
proverka = reference.child("oformzakaz");
dialog = new Dialog(getContext());
shops = reference.child("shops");
otzest = reference.child("otzyv");
recAptek = view.findViewById(R.id.recAptek);
prover = reference.child("otzyv");
recAptek.setLayoutManager(new LinearLayoutManager(this.getContext()));
textesti = view.findViewById(R.id.textesti);
mAuth = FirebaseAuth.getInstance();
String uid = Objects.requireNonNull(mAuth.getCurrentUser()).getUid();
shopipht = reference.child("DoCart");
HorizontalRec= view.findViewById(R.id.rectwohome);
HorizontalRec.setHasFixedSize(true);
HorizontalRec.setLayoutManager(
new LinearLayoutManager(this.getContext(),
LinearLayoutManager.HORIZONTAL,
false));
ValueEventListener mRefUserListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists() && snapshot.getChildrenCount() > 0) {
for (DataSnapshot ds : snapshot.getChildren()) {
ShopAdapter shopAdapter = ds.getValue(ShopAdapter.class);
assert shopAdapter != null;
Log.d("jipe", shopAdapter.getProductId());
dialog.setContentView(R.layout.layot_otzyvov);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
AppCompatButton appCompatButton = dialog.findViewById(R.id.button_otzyv_otprav);
RatingBar ratingBar = dialog.findViewById(R.id.ratingBarotzyvdia);
TextView texrstyle = dialog.findViewById(R.id.textstatusOtzyv);
TextView zavershitzakaz = dialog.findViewById(R.id.zavershitzakaz);
EditText opisanieotzyv = dialog.findViewById(R.id.opisanieotzyv);
TextView textViewzaverh = dialog.findViewById(R.id.textViewzaverh);
textViewzaverh.setHint(shopAdapter.getShopId());
zavershitzakaz.setHint(shopAdapter.getProductId());
refTwoRaw = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists() && snapshot.getChildrenCount() > 0) {
textViewzaverh.setText(shopAdapter.getZaverName() +
" завершил заказ. "
+ snapshot.child("clientName").getValue().toString()
+ ",оцените нас");
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
DatabaseReference child = getmyNameRef.child(uid);
child.addValueEventListener(refTwoRaw);
listeners.put(child, refTwoRaw);
zavershitzakaz.setOnClickListener(view1 -> {
shopipht.child(uid).removeValue();
proverka.child(uid + shopAdapter.getShopUid()).removeValue();
});
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float v, boolean b) {
String text = "";
if (v < 1) {
text = "Отвратительно";
} else if (v < 2) {
text = "Плохо";
} else if (v < 3) {
text = "Cредне";
} else if (v < 4) {
text = "Нормально";
} else if (v < 5) {
text = "Хорошо";
} else if (v < 6) {
text = "Отлично";
}
texrstyle.setText(text);
texrstyle.setHint(String.valueOf(v));
}
});
dialog.show();
appCompatButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (TextUtils.isEmpty(opisanieotzyv.getText().toString())) {
Toast.makeText(getContext(), "Опишите ваше мнение ", Toast.LENGTH_SHORT).show();
} else {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat currentDate = new SimpleDateFormat("ddMMyyyy");
saveCurrentDate = currentDate.format(calendar.getTime());
SimpleDateFormat currentTime = new SimpleDateFormat("HHmmss");
saveCurrentTime = currentTime.format(calendar.getTime());
ProductRandomKey = saveCurrentDate + saveCurrentTime;
HashMap<String, Object> men = new HashMap<>();
men.put("Value", texrstyle.getHint().toString());
men.put("ShopUid", shopAdapter.getShopUid());
men.put("text", opisanieotzyv.getText().toString());
otzyvRef.child(shopAdapter.getShopId()).child(uid + ProductRandomKey).updateChildren(men).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(getContext(), "Отзыв отправлен,спасибо", Toast.LENGTH_SHORT).show();
proverka.child(uid + shopAdapter.getProductId() + shopAdapter.getShopId()).removeValue();
dialog.dismiss();
} else {
String message = task.getException().toString();
Toast.makeText(getContext(), "Ошибка" + message, Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}
});
}
}
});
}
} else {
dialog.dismiss();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
Query query = proverka.orderByChild("Zakazstatus").equalTo(uid);
query.addValueEventListener(mRefUserListener);
listeners.put(query, mRefUserListener);
}
@Override
public void onResume() {
super.onResume();
FirebaseRecyclerOptions<ShopAdapter> options = new FirebaseRecyclerOptions.Builder<ShopAdapter>()
.setQuery(shops, ShopAdapter.class).build();
horizAdapter= new FirebaseRecyclerAdapter<ShopAdapter, HorizontalShopHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull HorizontalShopHolder holder, int position, @NonNull ShopAdapter model) {
textesti.setVisibility(View.VISIBLE);
holder.glavmagname.setText(model.getMagName());
holder.glavmagname.setHint(model.getMagUid());
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
testintTwo = Integer.valueOf("" + snapshot.getChildrenCount());
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
DatabaseReference child = prover.child(holder.glavmagname.getHint().toString());
child.addListenerForSingleValueEvent(listener);
listenersTwo.put(child, listener);
ValueEventListener list2 = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists() && snapshot.getChildrenCount() > 0) {
double diablot = 0.0;
for (DataSnapshot ds : snapshot.getChildren()) {
ShopAdapter shopAdapter = ds.getValue(ShopAdapter.class);
assert shopAdapter != null;
String string = shopAdapter.getValue();
otztvValuestwo = Double.parseDouble(string);
diablot = diablot + otztvValuestwo;
itogt = diablot / testint;
holder.rateyellow1g.setVisibility(getRateVisibility(itogt >= 0.5));
holder.rateyellow2g.setVisibility(getRateVisibility(itogt >= 1.5));
holder.rateyellow3g.setVisibility(getRateVisibility(itogt >= 2.5));
holder.rateyellow4g.setVisibility(getRateVisibility(itogt >= 3.5));
holder.rateyellow5g.setVisibility(getRateVisibility(itogt >= 4.5));
String result=String.format("%.3f",itogt);
holder.textstarg.setText(result);
}
}
}
private int getRateVisibility(boolean b) {
return b ? View.VISIBLE : View.INVISIBLE;
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
DatabaseReference child1 = otzest.child(holder.glavmagname.getHint().toString());
child1.addValueEventListener(list2);
listenersTwo.put(child1, list2);
Transformation transformation = new RoundedTransformationBuilder().borderColor(Color.WHITE).borderWidthDp(3).cornerRadius(15).oval(false).build();
Picasso.get().load(model.getMagLogo()).transform(transformation).into(holder.imageGlavMag);
}
@Override
public HorizontalShopHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_horizontal_shop, parent, false);
HorizontalShopHolder holder = new HorizontalShopHolder(view);
return holder;
}
};
HorizontalRec.setAdapter(horizAdapter);
FirebaseRecyclerOptions<ShopAdapter> Options = new FirebaseRecyclerOptions.Builder<ShopAdapter>()
.setQuery(shops, ShopAdapter.class).build();
VerticalAdapter = new FirebaseRecyclerAdapter<ShopAdapter, VerticalShopHolder>(Options) {
@Override
protected void onBindViewHolder(@NonNull VerticalShopHolder holder, int position, @NonNull ShopAdapter model) {
Transformation transformation = new RoundedTransformationBuilder().borderColor(Color.WHITE).borderWidthDp(3).cornerRadius(7).oval(false).build();
Picasso.get().load(model.getMagLogo()).transform(transformation).into(holder.imageLogoApteka);
holder.aotekaname.setText(model.getMagName());
holder.aotekaname.setHint(model.getMagUid());
Log.d("Окси", holder.aotekaname.getHint().toString());
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
testint = Integer.valueOf("" + snapshot.getChildrenCount());
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
DatabaseReference child = prover.child(holder.aotekaname.getHint().toString());
child.addListenerForSingleValueEvent(listener);
listeners.put(child, listener);
ValueEventListener list1 = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists() && snapshot.getChildrenCount() > 0) {
double diablo = 0.0;
for (DataSnapshot ds : snapshot.getChildren()) {
ShopAdapter shopAdapter = ds.getValue(ShopAdapter.class);
assert shopAdapter != null;
String string = shopAdapter.getValue();
otztvValues = Double.parseDouble(string);
diablo = diablo + otztvValues;
itog = diablo / testint;
holder.rateyellow1.setVisibility(getRateVisibility(itog >= 0.5));
holder.rateyellow2.setVisibility(getRateVisibility(itog >= 1.5));
holder.rateyellow3.setVisibility(getRateVisibility(itog >= 2.5));
holder.rateyellow4.setVisibility(getRateVisibility(itog >= 3.5));
holder.rateyellow5.setVisibility(getRateVisibility(itog >= 4.5));
String result=String.format("%.3f",itog);
holder.textstar.setText(result);
}
}
}
private int getRateVisibility(boolean b) {
return b ? View.VISIBLE : View.INVISIBLE;
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
DatabaseReference child1 = otzest.child(holder.aotekaname.getHint().toString());
child1.addValueEventListener(list1);
listeners.put(child1, list1);
}
@Override
public VerticalShopHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_vertical_shop
, parent, false);
return new VerticalShopHolder(view);
}
};
recAptek.setAdapter(VerticalAdapter);
VerticalAdapter.startListening();
horizAdapter.startListening();
}
@Override
public void onPause() {
super.onPause();
for (Map.Entry<Query, ValueEventListener> entry : listeners.entrySet()) {
entry.getKey().removeEventListener(entry.getValue());
}
for (Map.Entry<Query, ValueEventListener> entry : listenersTwo.entrySet()) {
entry.getKey().removeEventListener(entry.getValue());
}
horizAdapter.stopListening();
VerticalAdapter .stopListening();
}
}
ShopAdapter
public class ShopAdapter {
private String ZaverName,ProductId,shopId,Value,ShopUid,Zakazstatus,MagName,MagCity,MagAdress,MagUid,MagLogo,MagNumberReg,MagNumber,MagCategory;
public ShopAdapter() {
}
public ShopAdapter(String ZaverName, String ProductId, String shopId, String Value, String ShopUid, String Zakazstatus, String magName, String magCity, String magAdress, String magUid, String magLogo, String magNumberReg, String magNumber, String magCategory) {
this. MagName = magName;
this.Zakazstatus=Zakazstatus;
this. MagCity = magCity;
this.Value=Value;
this.ZaverName=ZaverName;
this.shopId=shopId;
this.MagAdress = magAdress;
this.MagUid = magUid;
this.ShopUid=ShopUid;
this.MagLogo = magLogo;
this.ProductId=ProductId;
this.MagNumberReg = magNumberReg;
this.MagNumber = magNumber;
this.MagCategory = magCategory;
}
public String getZaverName() {
return ZaverName;
}
public void setZaverName(String zaverName) {
ZaverName = zaverName;
}
public String getProductId() {
return ProductId;
}
public void setProductId(String productId) {
ProductId = productId;
}
public String getShopId() {
return shopId;
}
public void setShopId(String shopId) {
this.shopId = shopId;
}
public String getValue() {
return Value;
}
public void setValue(String value) {
Value = value;
}
public String getShopUid() {
return ShopUid;
}
public void setShopUid(String shopUid) {
ShopUid = shopUid;
}
public String getZakazstatus() {
return Zakazstatus;
}
public void setZakazstatus(String zakazstatus) {
Zakazstatus = zakazstatus;
}
public String getMagName() {
return MagName;
}
public void setMagName(String magName) {
MagName = magName;
}
public String getMagCity() {
return MagCity;
}
public void setMagCity(String magCity) {
MagCity = magCity;
}
public String getMagAdress() {
return MagAdress;
}
public void setMagAdress(String magAdress) {
MagAdress = magAdress;
}
public String getMagUid() {
return MagUid;
}
public void setMagUid(String magUid) {
MagUid = magUid;
}
public String getMagLogo() {
return MagLogo;
}
public void setMagLogo(String magLogo) {
MagLogo = magLogo;
}
public String getMagNumberReg() {
return MagNumberReg;
}
public void setMagNumberReg(String magNumberReg) {
MagNumberReg = magNumberReg;
}
public String getMagNumber() {
return MagNumber;
}
public void setMagNumber(String magNumber) {
MagNumber = magNumber;
}
public String getMagCategory() {
return MagCategory;
}
public void setMagCategory(String magCategory) {
MagCategory = magCategory;
}
}
VerticalShopHolder
public class VerticalShopHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView aotekaname,textcityapt,textadresssapt,aotekaas1,textmedes,textstar;
public RoundedImageView imageLogoApteka;
public CardView card_item;
public ImageView rateyellow1,rateyellow2,rateyellow3,rateyellow4,rateyellow5;
public ItemClickListener itemClickListener;
public VerticalShopHolder(View iteemView){
super(iteemView);
aotekaname=iteemView.findViewById(R.id.aotekaname);
/// textcityapt=iteemView.findViewById(R.id.textcityapt);
/// textadresssapt=iteemView.findViewById(R.id.textadresssapt);
imageLogoApteka=iteemView.findViewById(R.id.imageLogoApteka);
rateyellow1=iteemView.findViewById(R.id.rateyellow1);
rateyellow2=iteemView.findViewById(R.id.rateyellow2);
rateyellow3=iteemView.findViewById(R.id.rateyellow3);
textmedes=iteemView.findViewById(R.id.textmedes);
aotekaas1=iteemView.findViewById(R.id.aotekaas1);
textstar=iteemView.findViewById(R.id.textstar);
rateyellow4=iteemView.findViewById(R.id.rateyellow4);
rateyellow5=iteemView.findViewById(R.id.rateyellow5);
card_item=iteemView.findViewById(R.id.card_item);
card_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(view.getContext(), TovarActivity.class);
intent.putExtra("ShopUid",aotekaname.getHint().toString());
view.getContext().startActivity(intent);
}
});
}
public void setItemClickListner(ItemClickListener listner){this.itemClickListener=listner;}
@Override
public void onClick(View view){
itemClickListener.onClick(view,getAdapterPosition(),false);
}
}
HorizontalShopHolder
public class HorizontalShopHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView glavmagname,textstarg;
public RoundedImageView imageGlavMag;
public ItemClickListener itemClickListener;
public ImageView rateyellow1g,rateyellow2g,rateyellow3g,rateyellow4g,rateyellow5g;
public HorizontalShopHolder(View itemView){
super(itemView);
glavmagname=itemView.findViewById(R.id.glavmagname);
imageGlavMag=itemView.findViewById(R.id.imageGlavMag);
rateyellow1g=itemView.findViewById(R.id.rateyellow1g);
rateyellow2g=itemView.findViewById(R.id.rateyellow2g);
textstarg=itemView.findViewById(R.id.textstarg);
rateyellow3g=itemView.findViewById(R.id.rateyellow3g);
rateyellow4g=itemView.findViewById(R.id.rateyellow4g);
rateyellow5g=itemView.findViewById(R.id.rateyellow5g);
}
public void setItemClickListner(ItemClickListener listner){this.itemClickListener=listner;}
@Override
public void onClick(View view){
itemClickListener.onClick(view,getAdapterPosition(),false);
}
}