Как я могу решить проблему потребления памяти моим приложением

#java #android #android-studio #memory-management

#java #Android #android-studio #управление памятью

Вопрос:

Я создал приложение для Android для электронной коммерции. но потребление памяти моим приложением велико. он потребляет 500 МБ в течение 3 часов. И иногда это не работает должным образом на мобильных телефонах с низким объемом памяти. И когда я тестирую, ему не хватает памяти, и приложение выйдет из строя. Я новичок в программировании и не знаю методов программирования. пожалуйста, помогите мне решить эту проблему.вот мой код.

 public class HomeFragment extends Fragment {
    private View homeFragmentVeiw;
    private static ArrayList<Products> list,newLists,brandList;
    private ArrayList<Category> listx;
    private static ArrayList<Merchants> codeList=new ArrayList<>();
    private LinearLayout store,createStore,inviteFreinds,inviteSellers,barnd_layout;
    private static RecyclerView recyclerView1,catRec,new_products_rec,brandRec;
    private RelativeLayout mainLayout;
    private ImageSlider imageSlider;
    private TextView txtCreateStore;
    private TextView moreProductsTxt;
    private TextView newProductstxt;
    private ImageView imgCreateStore;
    private ProgressBar progressBar;
    private static String userName;
    private static String userNickName;
    private String package_name;
    private static ArrayList<Merchants> totalInvitation;
    private static Object invited_by;
    private static String txtinvitation=null,noOfInvitation;
    private LinearLayoutManager layoutManager1;
    private static DatabaseReference userCodeRef,ref =  FirebaseDatabase.getInstance().getReference();
    //private Picasso picasso;
    private List<SlideModel> slideModels;
    private  LinearLayoutManager layoutManager;
   // private CategoryAdapter categoryAdapter;
    private Intent intent;
    private String subject1,subject2;
    private static int check=0,checko=0;
    private static Dialog dialog;
    private static ArrayAdapter<String> adapter;
    private static ArrayList<String> listb;
    private NoConnections noConnections;
    private SellerListner sellerListner;
    private PagerListner pagerListner;
    private CategoryListner categoryListner;
    private UserListner userListner;
    private ProductListner productListner;
    private SaveInvitationListner saveInvitationListner;
    private static Query query;
    private static int checkP = 0;
    private RequestManager glide;
    private CardView scan;
    private RequestManager glidep;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             final Bundle savedInstanceState) {
        homeFragmentVeiw = inflater.inflate(R.layout.fragment_home, container, false);
        glidep = Glide.with(this);
        glide = Glide.with(getContext());

        ref =  FirebaseDatabase.getInstance().getReference();
        codeList=new ArrayList<>();
        if (getContext()!=null) {
            //package name
            package_name = getContext().getPackageName();

            dialog = new Dialog(getContext());

            scan = homeFragmentVeiw.findViewById(R.id.Scan_QR);
            scan.setVisibility(View.GONE);
            FirebaseDatabase.getInstance().getReference().child("Admin_QR_trade").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()){
                        if (dataSnapshot.getValue().toString().equals("on")){
                            scan.setVisibility(View.VISIBLE);
                        }else{
                            scan.setVisibility(View.GONE);
                        }
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
            scan.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(getContext(), QRCodeRunner.class);
                    startActivity(intent);
                }
            });
            barnd_layout = homeFragmentVeiw.findViewById(R.id.brand_list);
            barnd_layout.setVisibility(View.GONE);
            brandRec = homeFragmentVeiw.findViewById(R.id.brand_rec);
            brandRec.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
            brandRec.setHasFixedSize(false);
            showBrand();

            store = homeFragmentVeiw.findViewById(R.id.store);
            inviteSellers = homeFragmentVeiw.findViewById(R.id.user_invite_sellers);
            inviteFreinds = homeFragmentVeiw.findViewById(R.id.invite_friends);
            createStore = homeFragmentVeiw.findViewById(R.id.create_store);
            new_products_rec = homeFragmentVeiw.findViewById(R.id.new_product_rec);
            RecyclerView.LayoutManager LayoutMgr = new
                    StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
            new_products_rec.setLayoutManager(LayoutMgr);

            moreProductsTxt = homeFragmentVeiw.findViewById(R.id.more_products_title);
            imgCreateStore = homeFragmentVeiw.findViewById(R.id.img_create_store);
            txtCreateStore = homeFragmentVeiw.findViewById(R.id.txt_create_store);
            mainLayout = homeFragmentVeiw.findViewById(R.id.main_layout);
            progressBar = homeFragmentVeiw.findViewById(R.id.home_fragment_progress);
            recyclerView1 = homeFragmentVeiw.findViewById(R.id.product_rec);
            newProductstxt = homeFragmentVeiw.findViewById(R.id._title);
            RecyclerView.LayoutManager mLayoutManager = new
                    StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
            layoutManager1 = new GridLayoutManager(getContext(), 2);
            recyclerView1.setLayoutManager(mLayoutManager);
//
            //checking the user has seller account
            if (getContext()!=null) {
                sellerListner = new SellerListner(txtCreateStore, getContext(), imgCreateStore,glide);
                ref.child("Sellers").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).addValueEventListener(sellerListner);
            }

            imageSlider = homeFragmentVeiw.findViewById(R.id.banners);
            slideModels = new ArrayList<>();
            //the view pager
            pagerListner = new PagerListner(slideModels,imageSlider);
            ref.child("banners").addValueEventListener(pagerListner);
            //for category images

            catRec = homeFragmentVeiw.findViewById(R.id.cat_rec);

            catRec.setHasFixedSize(true);
            layoutManager = new LinearLayoutManager(getContext());
            catRec.setLayoutManager(layoutManager);
            //retriving the category
            categoryListner = new CategoryListner(listx,progressBar,moreProductsTxt,mainLayout,catRec,getContext(),newProductstxt);
            ref.child("Category").addValueEventListener(categoryListner);

            store.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    checkconnection();
                    intent = new Intent(getContext(), StoreActivity.class);
                    startActivity(intent);
                }
            });
            //checking initation and showing the dialogue
            userListner = new UserListner(getContext(),progressBar);
            ref.child("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).addValueEventListener(userListner);
            inviteFreinds.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if (ref.child("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()) == null) {
                        checkconnection();
                    } else {
                        //checking the user has account or not
                        if (userNickName != null) {
                            intent = new Intent(Intent.ACTION_SEND);
                            intent.setType("text/plain");
                            subject1 = getString(R.string.Hello_friends_my_name_is)   " "   userName   " "   getString(R.string.inviting_friends)   "n"   getString(R.string.you_can_get_it)   "n "   getString(R.string.write_this_code)   " "   userNickName   " "   getString(R.string.for_supporting)   "n"   getString(R.string.thankyou)   "n"   "https://play.google.com/store/apps/details?id="   package_name;
                            intent.putExtra(Intent.EXTRA_TEXT, subject1);
                            startActivity(Intent.createChooser(intent, "Share via"));
                        } else {
                            Toast.makeText(getContext(), getString(R.string.creat_account), Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            });
            inviteSellers.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if ( ref.child("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()) == null) {
                        checkconnection();
                    } else {
                        //checking the user has account or not
                        if (userNickName != null) {
                            intent = new Intent(Intent.ACTION_SEND);
                            intent.setType("text/plain");
                            subject2 = getString(R.string.Hello_friends_my_name_is)   " "   userName   " "   getString(R.string.inviting_users)   "n"   getString(R.string.you_can_get_it)   "n"   getString(R.string.thankyou)   "n"   "https://play.google.com/store/apps/details?id="   package_name;
                            intent.putExtra(Intent.EXTRA_TEXT, subject2);
                            startActivity(Intent.createChooser(intent, "Share via"));
                        } else {
                            Toast.makeText(getContext(), getString(R.string.creat_account), Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            });
            createStore.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    checkconnection();
                    intent = new Intent(getContext(), SellerActivity.class);
                    startActivity(intent);
                }
            });
//            //geting all product
            productListner = new ProductListner(getContext(),glidep);
            query = FirebaseDatabase.getInstance().getReference().child("Products").orderByChild("published_on_date");
            query.addValueEventListener(productListner);
            //saveing invitations to database
            saveInvitationListner = new SaveInvitationListner();
            ref.child("Users").addValueEventListener(saveInvitationListner);

            checkconnection();

            if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

            } else {
                ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 20);
            }
        }

        return homeFragmentVeiw;
    }



    private void showBrand() {
        FirebaseDatabase.getInstance().getReference().child("Brand").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                     brandList = new ArrayList<>();
                     for (DataSnapshot ds : dataSnapshot.getChildren()){
                         if (ds.child("availability").getValue().equals("enabled")){
                             brandList.add(ds.getValue(Products.class));
                             barnd_layout.setVisibility(View.VISIBLE);
                         }
                     }
                     BrandAdapter brandAdapter = new BrandAdapter(brandList,getContext());
                     brandRec.setAdapter(brandAdapter);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }


    public void checkconnection() {
        noConnections = new NoConnections(getContext());
        noConnections.checkconnection();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        check = 0;checko = 0;
        sellerListner=null;
        pagerListner=null;
        categoryListner=null;
        userListner=null;
        productListner=null;
        saveInvitationListner=null;
        glide=null;
        dialog = null;
        glidep = null;
    }
}
  

Эта страница занимает много памяти. Пожалуйста, помогите мне решить мою проблему.

Комментарии:

1. Много статики. К вашему сведению Static members are part of class and thus remain in memory till application terminates and can’t be ever garbage collected.

2. Это может помочь вам square.github.io/leakcanary/fundamentals

3. Пожалуйста, ответьте за меня!!!!!