অ্যান্ড্রয়েড রিসাইকেলারভিউ স্ক্রোলিং পারফরম্যান্স


88

তালিকাগুলি তৈরি এবং তালিকা তৈরির গাইডের উপর ভিত্তি করে আমি পুনর্ব্যবহারযোগ্য উদাহরণ তৈরি করেছি । আমার অ্যাডাপ্টারের একটি লেআউট প্রয়োগ কেবল লেফট স্ফুটনের জন্য।

সমস্যা হ'ল দুর্বল স্ক্রোলিং কর্মক্ষমতা। এটি কেবল 8 টি আইটেম সহ একটি রিসাইকেলভিউতে।

কিছু পরীক্ষায় আমি যাচাই করেছিলাম যে অ্যান্ড্রয়েড এল-এ এই সমস্যাটি দেখা দেয় না। তবে কিটকাট সংস্করণে কর্মক্ষমতা হ্রাস হওয়া স্পষ্ট।


4
স্ক্রোলিং পারফরম্যান্সের জন্য ভিউহোল্ডার ডিজাইনের প্যাটার্নটি ব্যবহার করার চেষ্টা করুন: ডেভেলপার.অ্যান্ড্রয়েড
ট্রেনিং / ইমপ্রোভিং-আউটআউট /

আপনার উত্তর দেওয়ার জন্য @ হারেশচেলানা ধন্যবাদ! তবে আমি লিঙ্কটি অনুযায়ী ভিউহোল্ডার প্যাটার্নটি ইতিমধ্যে ব্যবহার করছি: বিকাশকারী.অ্যান্ড্রয়েড
ট্রেনিং

4
আপনি কি আপনার অ্যাডাপ্টার সেটআপ এবং আপনার লেআউটগুলির জন্য এক্সএমএল ফাইল সম্পর্কে কিছু কোড ভাগ করতে পারেন। এটি সাধারণ দেখায় না। এছাড়াও, আপনি কি প্রোফাইলটি দেখেছেন এবং সময়টি কোথায় ব্যয় করেছেন?
ইজিগিত

4
আমি প্রায় সব একই সমস্যা সম্মুখীন হয়। প্রি ললিপপ এর দ্রুত এবং অ্যান্ড্রয়েড এল এর অবিশ্বাস্য (সত্যই) ধীর গতি
ব্যতীত

4
আপনি যে লাইব্রেরিটি আমদানি করছেন তার সংস্করণটিও ভাগ করতে পারেন।
দ্রোইদকাস

উত্তর:


231

আমি সম্প্রতি একই সমস্যাটির মুখোমুখি হয়েছি, তাই সর্বশেষ রিসাইক্লারভিউ সমর্থন লাইব্রেরি দিয়ে আমি এটি করেছি:

  1. একটি জটিল লেআউট (নেস্টেড ভিউ, রিলেটিভলআউট) নতুন অপ্টিমাইজড কনস্ট্রেন্টলয়েউটের সাথে প্রতিস্থাপন করুন । এটিকে অ্যান্ড্রয়েড স্টুডিওতে সক্রিয় করুন: এসডিকে ম্যানেজার -> এসডিকে সরঞ্জাম ট্যাব -> সহায়তা সংগ্রহস্থল -> অ্যান্ড্রয়েডের জন্য কনস্ট্রেন্টলয়েট এবং কনস্ট্রেন্টলয়েট জন্য সলভার পরীক্ষা করুন। নির্ভরতা যুক্ত করুন:

    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    
  2. যদি সম্ভব হয় তবে একই উচ্চতার সাথে পুনর্ব্যবহারযোগ্য সমস্ত উপাদান তৈরি করুন । এবং যোগ করুন:

    recyclerView.setHasFixedSize(true);
    
  3. ডিফল্ট পুনর্ব্যবহারযোগ্য চিত্র অঙ্কন ক্যাশে পদ্ধতিগুলি ব্যবহার করুন এবং আপনার কেস অনুসারে সেগুলিকে টুইট করুন। এটি করার জন্য আপনার তৃতীয় পক্ষের লাইব্রেরি লাগবে না:

    recyclerView.setItemViewCacheSize(20);
    recyclerView.setDrawingCacheEnabled(true);
    recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    
  4. আপনি যদি অনেকগুলি চিত্র ব্যবহার করেন তবে নিশ্চিত করুন যে তাদের আকার এবং সংকোচনটি সর্বোত্তম । স্কেলিং চিত্রগুলি পারফরম্যান্সকেও প্রভাবিত করতে পারে। সমস্যার দুটি দিক রয়েছে - উত্সের চিত্র ব্যবহৃত এবং ডিকোডেড বিটম্যাপ। নিম্নলিখিত উদাহরণটি আপনাকে ওয়েব থেকে ডাউনলোড করা ইমেজটি ডিকোড করার একটি ইঙ্গিত দেয়:

    InputStream is = (InputStream) url.getContent();
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    Bitmap image = BitmapFactory.decodeStream(is, null, options);
    

সর্বাধিক গুরুত্বপূর্ণ অংশটি উল্লেখ করা হচ্ছে inPreferredConfig- এটি চিত্রটির প্রতিটি পিক্সেলের জন্য কতগুলি বাইট ব্যবহার করা হবে তা নির্ধারণ করে। মনে রাখবেন যে এটি একটি পছন্দসই বিকল্প। যদি উত্স চিত্রটিতে আরও রঙ থাকে তবে এটি এখনও অন্য একটি কনফিগারেশনের সাথে ডিকোড হবে।

  1. নিশ্চিত করুন onBindViewHolder () হিসাবে সস্তা সম্ভব। আপনি অনক্লিকলিস্টনার একবারে সেট করতে পারেন onCreateViewHolder()এবং ক্লিক করা আইটেমটি পাস করে একটি ইন্টারফেসের মাধ্যমে অ্যাডাপ্টারের বাইরে শ্রোতার কাছে কল করতে পারেন । এভাবে আপনি সারাক্ষণ অতিরিক্ত বস্তু তৈরি করেন না। এখানে দর্শনে কোনও পরিবর্তন করার আগে পতাকা এবং রাজ্যগুলিও পরীক্ষা করে দেখুন।

    viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              Item item = getItem(getAdapterPosition());
              outsideClickListener.onItemClicked(item);
          }
    });
    
  2. যখন ডেটা পরিবর্তন হয়ে যায়, কেবলমাত্র প্রভাবিত আইটেমগুলি আপডেট করার চেষ্টা করুন । উদাহরণস্বরূপ পুরো ডেটা সেটটি অকার্যকর করার পরিবর্তে, notifyDataSetChanged()আরও আইটেম যুক্ত / লোড করার সময়, কেবলমাত্র ব্যবহার করুন:

    adapter.notifyItemRangeInserted(rangeStart, rangeEnd);
    adapter.notifyItemRemoved(position);
    adapter.notifyItemChanged(position);
    adapter.notifyItemInserted(position);
    
  3. থেকে Android বিকাশকারী ওয়েব সাইট :

একটি সর্বশেষ উপায় হিসাবে notifyDataSetChanged () উপর নির্ভর করুন।

তবে আপনি যদি এটি ব্যবহার করতে চান তবে অনন্য আইডিসহ আপনার আইটেমগুলি বজায় রাখুন :

    adapter.setHasStableIds(true);

রিসাইক্লারভিউ অ্যাডাপ্টারের জন্য দৃশ্যমান কাঠামোগত পরিবর্তন ইভেন্টগুলি সংশ্লেষিত করার চেষ্টা করবে যে এই পদ্ধতিটি ব্যবহার করার সময় তাদের স্থিতিশীল আইডি রয়েছে report এটি অ্যানিমেশন এবং ভিজ্যুয়াল অবজেক্টের অধ্যবসায়ের উদ্দেশ্যে সহায়তা করতে পারে তবে স্বতন্ত্র আইটেম দর্শনগুলি পুনরায় প্রত্যাবর্তন করতে এবং পুনরায় সংযুক্ত করা প্রয়োজন।

এমনকি আপনি যদি সবকিছু ঠিকঠাক করেন তবে সম্ভাবনা হ'ল রিসাইক্লারভিউ এখনও আপনার পছন্দ মতো সুষ্ঠুভাবে পারফর্ম করছে না।


20
অ্যাডাপ্টার.সেটহ্যাসস্টেবলআইডস (সত্য) এর জন্য একটি ভোট; এমন পদ্ধতি যা সত্যই রিসাইক্লারভিউকে দ্রুত তৈরি করতে সহায়তা করে।
অতুলা

4
পার্ট 7 সম্পূর্ণ ভুল! setHasStableIds (সত্য) আপনি অ্যাডাপ্টার ব্যবহার ব্যতীত কিছুই করবে না notনোটাইফ ডেটাসেট চেঞ্জড ()। লিংক: বিকাশকারী.আ্যান্ড্রয়েড.
লোকালহোস্ট

4
আমি দেখতে পাচ্ছি যে কেন recyclerView.setItemViewCacheSize(20);পারফরম্যান্সটিকে নষ্ট করতে পারে। কিন্তু recyclerView.setDrawingCacheEnabled(true);recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);যদিও! আমি নিশ্চিত না যে এগুলি কিছু পরিবর্তন করবে। এগুলি Viewনির্দিষ্ট কলগুলি যা আপনাকে প্রোগ্রামিংয়ে বিটম্যাপ হিসাবে অঙ্কন ক্যাশে পুনরুদ্ধার করতে এবং পরে আপনার সুবিধার জন্য এটি ব্যবহার করতে দেয়। RecyclerViewএটি সম্পর্কে কিছুই করার মনে হয় না।
আবদেলহাকিম একেডাদি

4
@ আবদেলহাকিম আকোদাডি, স্ক্রোলিং ক্যাশে সহ মসৃণ হয়। আমি এটি পরীক্ষা করেছি। আপনি অন্যথায় কীভাবে বলতে পারেন, এটি সুস্পষ্ট। অবশ্যই, যদি কেউ পাগলের মতো স্ক্রোল করে তবে কিছুই সাহায্য করবে না। আমি কেবল সেটড্রয়িংক্যাচুয়ালিটি, যা আমি ব্যবহার করি না এর মতো অন্যান্য বিকল্পগুলি দেখাই, কারণ আমার ক্ষেত্রে চিত্রের গুণমান গুরুত্বপূর্ণ। আমি DRAWING_CACHE_QUALI.. TY_HIGH প্রচার করি না, তবে পরামর্শ দিচ্ছি যে কেহ আরও গভীরভাবে আবিষ্কার করতে এবং বিকল্পটি টুইট করতে আগ্রহী।
গাল্যা

4
setDrawingCacheEnabled () এবং setDrawingCacheQual () অবমূল্যায়ন করা হয়েছে। পরিবর্তে হার্ডওয়্যার ত্বরণ ব্যবহার করুন। বিকাশকারী.অ্যান্ড্রয়েড.
com

14

আমি নীচের পতাকাটি যুক্ত করে এই সমস্যাটি সমাধান করেছি:

https://developer.android.com/references/android/support/v7/widget/RecyclerView.Adapter.html#setHasStableIds(boolean)


4
এটি আমার জন্য সামান্য পারফরম্যান্সের উন্নতি করে। তবে রিসাইক্লারভিউ এখনও মৃত-কুকুর ধীর - সমতুল্য কাস্টম তালিকাভিউয়ের চেয়ে অনেক ধীর।
এসএমবিগস

আহ, তবে আমি আবিষ্কার করেছি যে আমার কোডটি এত ধীরে কেন - সেটহ্যাসস্টেবলআইডস () এর সাথে এর কোনও যোগসূত্র নেই। আমি আরও তথ্যের সাথে একটি উত্তর পোস্ট করব।
এসএমবিগস

13

আমি অন্তত একটি প্যাটার্ন আবিষ্কার করেছি যা আপনার অভিনয়কে মেরে ফেলতে পারে। মনে রাখবেন যে ঘন ঘনonBindViewHolder() বলা হয় । সুতরাং আপনি যে কোডটিতে কিছু করেন না কেন আপনার পারফরম্যান্স থামার সম্ভাবনা রয়েছে। যদি আপনার রিসাইক্লারভিউ কোনও কাস্টমাইজেশন করে তবে দুর্ঘটনাক্রমে এই পদ্ধতিতে কিছু ধীর কোড স্থাপন করা খুব সহজ।

আমি অবস্থানের উপর নির্ভর করে প্রতিটি পুনর্ব্যবহারযোগ্য দৃশ্যের পটভূমি চিত্রগুলি পরিবর্তন করছি। তবে চিত্রগুলি লোড করাতে কিছুটা সময় লাগে, যার ফলে আমার পুনর্ব্যবহারযোগ্য ভিউটি সুস্থ এবং বিড়বিড় করে।

চিত্রগুলির জন্য একটি ক্যাশে তৈরি করা বিস্ময়করভাবে কাজ করেছে; onBindViewHolder()এখন স্ক্র্যাচ থেকে লোড না করে কেবল একটি ক্যাশেড চিত্রের একটি রেফারেন্স পরিবর্তন করে। এখন রিসাইক্লারভিউ জিপগুলি বরাবর।

আমি জানি যে প্রত্যেকেরই এই সঠিক সমস্যা হবে না, তাই আমি কোড লোড করতে বিরক্ত করছি না। তবে দয়া করে আপনার onBindViewHolder()দুর্বল রিসাইক্লারভিউ পারফরম্যান্সের জন্য সম্ভাব্য বোতল-ঘাড় হিসাবে করা কোনও কাজ বিবেচনা করুন ।


আমারও একই সমস্যা হচ্ছে এখনই আমি চিত্র লোডিং এবং ক্যাশিংয়ের জন্য ফ্রেস্কো ব্যবহার করছি। আপনার কাছে আর একটি, রিসাইক্লার ভিউতে চিত্র লোড এবং ক্যাশে করার আরও ভাল সমাধান রয়েছে। ধন্যবাদ
অ্যান্ড্রয়েডিকাস

আমি ফ্রেস্কোর সাথে অপরিচিত (পড়া ... তাদের প্রতিশ্রুতিগুলি দুর্দান্ত)। রিসাইক্লারভিউসের সাহায্যে তাদের ক্যাশে কীভাবে সর্বোত্তমভাবে ব্যবহার করা যায় সে সম্পর্কে তাদের কিছু অন্তর্দৃষ্টি রয়েছে। এবং আমি দেখতে পাচ্ছি যে আপনি এই সমস্যাটির সাথে একমাত্র নন : github.com/facebook/fresco/issues/414
এসএমবিগস

10

@ গালিয়ার বিশদ উত্তর ছাড়াও, আমি এটাও বলতে চাই যে এটি একটি অপ্টিমাইজেশনের সমস্যা হতে পারে তবে এটিও সত্য যে ডিবাগারটি সক্ষম করা জিনিসকে অনেকটা ধীর করে দিতে পারে।

যদি আপনি নিজের অনুকূলকরণের জন্য সবকিছু করেন RecyclerViewএবং এটি এখনও সহজেই কাজ করে না, তবে আপনার বিল্ড বৈকল্পিকটি এতে স্যুইচ করার চেষ্টা করুন releaseএবং এটি কীভাবে একটি উন্নয়ন-বিকাশের পরিবেশে কাজ করে তা পরীক্ষা করুন (ডিবাগার অক্ষম করে)।

এটি আমার ক্ষেত্রে ঘটেছিল যে আমার অ্যাপ্লিকেশনটি debugবিল্ড ভেরিয়েন্টে ধীরে ধীরে পারফর্ম করছে , তবে আমি releaseভেরিয়েন্টটিতে স্যুইচ করার সাথে সাথে এটি সহজেই কাজ করেছিল। এর অর্থ এই নয় যে আপনার releaseবিল্ড বৈকল্পের সাথে বিকাশ করা উচিত , তবে এটি জেনে রাখা ভাল যে আপনি যখনই আপনার অ্যাপ্লিকেশনটি পাঠাতে প্রস্তুত হন, এটি ঠিক কাজ করবে work


এই মন্তব্যটি আমার জন্য সত্যই সহায়ক ছিল! আমি আমার পুনর্ব্যবহারযোগ্যতার পারফরম্যান্সটি উন্নত করার জন্য সবকিছু চেষ্টা করেছি তবে কিছুই সত্যই সাহায্য করতে পারেনি, তবে আমি একবার মুক্তির বিল্ডে স্যুইচ করেছি আমি বুঝতে পেরেছি যে সবকিছু ঠিক আছে।
তাল বরদা

4
ডিবাগারটি সংযুক্ত না করেও আমি একই সমস্যার মুখোমুখি হয়েছি তবে বিল্ডটি প্রকাশের সাথে সাথেই ইস্যুটি আর দেখার মতো ছিল না
Farmaan Elahi

8

আমি RecyclerViewএর অভিনয় সম্পর্কে একটি কথা ছিল । এখানে ইংরেজিতে স্লাইড এবং মধ্যে রাশিয়ান রেকর্ড করা ভিডিও

এটিতে কৌশলগুলির একটি সেট রয়েছে (এর মধ্যে কয়েকটি ইতিমধ্যে @ দরিয়ার উত্তর দ্বারা আবৃত )।

এখানে একটি সংক্ষিপ্তসার:

  • যদি Adapterআইটেমগুলির স্থির আকার থাকে তবে সেট করুন:
    recyclerView.setHasFixedSize(true);

  • যদি ডেটা সত্তা দীর্ঘ ( hashCode()উদাহরণস্বরূপ) দ্বারা উপস্থাপন করা যায় তবে সেট করুন:
    adapter.hasStableIds(true);
    এবং প্রয়োগ করুন:
    // YourAdapter.java
    @Override
    public long getItemId(int position) {
    return items.get(position).hashcode(); //id()
    }
    এই ক্ষেত্রে Item.id()কাজ করবে না, কারণ এটি একই এমনকি যদি থাকবে Item'র বিষয়বস্তু পরিবর্তন করা হয়েছে।
    PS আপনি ডিফুটিল ব্যবহার করছেন যদি এটি প্রয়োজন হয় না!

  • সঠিকভাবে স্কেল বিটম্যাপ ব্যবহার করুন। চাকা পুনরায় উদ্ভাবন এবং লাইব্রেরি ব্যবহার করবেন না।
    আরো তথ্য কিভাবে পছন্দ করে নিন এখানে

  • সর্বদা এর সর্বশেষতম সংস্করণ ব্যবহার করুন RecyclerView। উদাহরণস্বরূপ, এখানে বিশাল কর্মক্ষমতা উন্নতি হয়েছে25.1.0 - প্রিফেচ- ।
    আরও তথ্য এখানে

  • ডিফফলিল ব্যবহার করুন।
    ডিফুটিল একটি আবশ্যক
    অফিসিয়াল ডকুমেন্টেশন

  • আপনার আইটেমের বিন্যাস সরল করুন!
    টেক্সটভিউগুলি সমৃদ্ধ করার জন্য ক্ষুদ্র গ্রন্থাগার - পাঠ্য ভিউরিচড্রেবল able

আরও বিস্তারিত ব্যাখ্যা জন্য স্লাইড দেখুন ।


7

আমি ব্যবহার নিশ্চিত কিনা নিশ্চিত setHasStableId পতাকাটির আপনার সমস্যাটি সমাধান করতে চলেছে। আপনি যে তথ্য সরবরাহ করেন তার উপর ভিত্তি করে আপনার পারফরম্যান্স ইস্যু কোনও মেমরি সমস্যার সাথে সম্পর্কিত হতে পারে। ব্যবহারকারী ইন্টারফেস এবং মেমরির ক্ষেত্রে আপনার অ্যাপ্লিকেশন কর্মক্ষমতা যথেষ্ট সম্পর্কিত।

গত সপ্তাহে আমি আবিষ্কার করেছি আমার অ্যাপ্লিকেশনটি মেমরি ফাঁস করছে। আমি এটি আবিষ্কার করেছি কারণ আমার অ্যাপ্লিকেশনটি ব্যবহার করার 20 মিনিটের পরে আমি লক্ষ্য করেছি যে ইউআই সত্যই ধীর গতিতে কাজ করছে। কোনও ক্রিয়াকলাপ বন্ধ করা / খোলার বা একটি সংযোজন উপাদানগুলির সাথে একটি পুনর্ব্যবহারযোগ্য ভিউ স্ক্রোল করা সত্যিই ধীর ছিল। Http://flowup.io/ ব্যবহার করে উত্পাদনে আমার কিছু ব্যবহারকারীকে পর্যবেক্ষণ করার পরে আমি এটি পেয়েছি:

এখানে চিত্র বর্ণনা লিখুন

ফ্রেমের সময়টি সত্যই বেশি ছিল এবং প্রতি সেকেন্ডের ফ্রেমগুলি সত্যই কম ছিল। আপনি দেখতে পাচ্ছেন যে কয়েকটি ফ্রেমের রেন্ডার করতে প্রায় 2 সেকেন্ডের দরকার ছিল: এস।

এই খারাপ ফ্রেমের সময় / fps কী ঘটছে তা সনাক্ত করার চেষ্টা করে আমি আবিষ্কার করেছি যে এখানে একটি স্মৃতি সমস্যা রয়েছে যা আপনি এখানে দেখতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

এমনকি গড় মেমরির খরচ একই সময়ে 15MB এর কাছাকাছি থাকলেও অ্যাপ্লিকেশনটি ফ্রেমগুলি ছাড়ছিল।

আমি ইউআই সমস্যাটি আবিষ্কার করেছি discovered আমার অ্যাপটিতে একটি মেমরি ফাঁস হয়েছিল যা প্রচুর আবর্জনা সংগ্রহকারী ইভেন্ট ঘটাচ্ছে এবং এটি ইউআই পারফরম্যান্সের খারাপ কারণ ঘটাচ্ছে কারণ প্রতি একক ফ্রেমে মেমরি সংগ্রহ করতে অ্যান্ড্রয়েড ভিএমকে আমার অ্যাপটি বন্ধ করতে হয়েছিল stop

কোডটি দেখে আমার কাস্টম ভিউয়ের ভিতরে একটি ফাঁস হয়েছিল কারণ আমি অ্যান্ড্রয়েড কোরিওগ্রাফার উদাহরণ থেকে কোনও শ্রোতার তালিকাভুক্ত করছি না। সমাধানটি প্রকাশের পরে, সবকিছু স্বাভাবিক হয়ে গেল :)

যদি আপনার অ্যাপ্লিকেশন কোনও মেমরি সমস্যার কারণে ফ্রেমগুলি বাদ দিচ্ছে তবে আপনার দুটি সাধারণ ত্রুটি পর্যালোচনা করা উচিত:

যদি আপনার অ্যাপ্লিকেশনটি কোনও পদ্ধতির মধ্যে অবজেক্টগুলি বরাদ্দ করে তবে প্রতি সেকেন্ডে একাধিকবার আবেদন করা হয়েছে। এমনকি যদি এই বরাদ্দটি অন্য কোনও জায়গায় সঞ্চালিত করা যায় যেখানে আপনার অ্যাপ্লিকেশনটি ধীর হয়ে যাচ্ছে। একটি উদাহরণ হতে পারে আপনার পুনর্ব্যবহারযোগ্য ভিউ ধারকটিতে অনব্যান্ডভিউহোল্ডারটিতে অনড্রাস্ট কাস্টম ভিউ পদ্ধতির অভ্যন্তরে কোনও অবজেক্টের নতুন উদাহরণ তৈরি করা creating আপনার অ্যাপটি অ্যান্ড্রয়েড এসডিকে তে কোনও উদাহরণ নিবন্ধিত করছে তবে তা প্রকাশ করছে না তা পর্যালোচনা করুন। কোনও শ্রোতার একটি বাস ইভেন্টে নিবন্ধন করাও সম্ভব ফাঁস হতে পারে।

দাবি অস্বীকার: আমি আমার অ্যাপ্লিকেশনটি পর্যবেক্ষণ করতে যে সরঞ্জামটি ব্যবহার করছি সেটি বিকাশের অধীনে। আমি এই সরঞ্জামটিতে অ্যাক্সেস পেয়েছি কারণ আমি অন্যতম বিকাশকারী :) আপনি যদি এই সরঞ্জামটিতে অ্যাক্সেস চান তবে আমরা শীঘ্রই একটি বিটা সংস্করণ প্রকাশ করব! আপনি আমাদের ওয়েবসাইটে যোগদান করতে পারেন: http://flowup.io/

আপনি যদি বিভিন্ন সরঞ্জাম ব্যবহার করতে চান তবে আপনি ব্যবহার করতে পারেন: ট্র্যাভেলভিউ, ডিএমট্রেসডাম্প, সিস্ট্রাস বা অ্যান্ড্রয়েড পারফরম্যান্স মনিটর অ্যান্ড্রয়েড স্টুডিওতে ইন্টিগ্রেটেড। তবে মনে রাখবেন যে এই সরঞ্জামগুলি আপনার সংযুক্ত ডিভাইসটি পর্যবেক্ষণ করবে এবং আপনার ব্যবহারকারীর বাকী ডিভাইস বা অ্যান্ড্রয়েড ওএস ইনস্টলেশনগুলি নয়।


3

আপনি আপনার পুনর্ব্যবহারযোগ্য ভিউতে যে প্যারেন্ট লেআউটটি রেখেছেন তা পরীক্ষা করাও গুরুত্বপূর্ণ। যখন আমি নেস্টস্ক্রোলভিউতে পুনর্ব্যবহারযোগ্য ভিউ পরীক্ষা করছি তখন আমারও একই স্ক্রোলিংয়ের সমস্যা ছিল। এমন একটি দৃশ্য যা অন্য ভিউতে স্ক্রোল করে যা স্ক্রোল করার সময় স্ক্রোল কার্য সম্পাদনে ভুগতে পারে


2

আমার ক্ষেত্রে, আমি জানতে পেরেছিলাম যে পিছিয়ে থাকার উল্লেখযোগ্য কারণটি হ'ল #onBindViewHolder()পদ্ধতিটির অভ্যন্তরে ঘন ঘন অঙ্কনযোগ্য লোড । আমি ভিউহোল্ডারের অভ্যন্তরে একবারে বিটম্যাপ হিসাবে চিত্রগুলি লোড করে উল্লিখিত পদ্ধতিটি থেকে এটি অ্যাক্সেস করেছি। এটাই আমি করেছি।


2

আমার পুনর্ব্যবহারযোগ্য ভিউতে আমি আমার আইটেম_লআউট এর পটভূমির জন্য বিটম্যাপ চিত্রগুলি ব্যবহার করি।
@ গালিয়া যা বলেছিলেন তা সবই সত্য (এবং আমি তার দুর্দান্ত উত্তরের জন্য তাকে ধন্যবাদ জানাই)। তবে তারা আমার পক্ষে কাজ করেনি।

এটিই আমার সমস্যার সমাধান করেছে:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeStream(stream, null, options);

আরও তথ্যের জন্য দয়া করে এই উত্তরটি পড়ুন


2

মাইকেসে আমার জটিল পুনর্ব্যবহারযোগ্য শিশু রয়েছে। সুতরাং এটি ক্রিয়াকলাপের লোডিংয়ের সময়কে (প্রভাবিত করে ক্রিয়াকলাপের জন্য 5 ডলার)

আমি পোস্টডিলিয়েড () -> দিয়ে অ্যাডাপ্টারটি লোড করি এটি ক্রিয়াকলাপ রেন্ডারিংয়ের জন্য ভাল ফলাফল দেয়। ক্রিয়াকলাপের পরে মসৃণ সাথে আমার পুনর্ব্যবহারযোগ্য লোড রেন্ডার করে।

এই উত্তরটি চেষ্টা করুন,

    recyclerView.postDelayed(new Runnable() {
        @Override
        public void run() {
            recyclerView.setAdapter(mAdapter);
        }
    },100); 

1

আমি মন্তব্যগুলিতে দেখতে পাচ্ছি যে আপনি ইতিমধ্যে ViewHolderপ্যাটার্নটি বাস্তবায়ন করছেন , তবে আমি এখানে একটি উদাহরণ অ্যাডাপ্টার পোস্ট করব যা RecyclerView.ViewHolderপ্যাটার্নটি ব্যবহার করে যাতে আপনি যাচাই করতে পারেন যে আপনি এটি একইভাবে সংহত করছেন, আবার আপনার নির্মাতা আপনার প্রয়োজনের উপর নির্ভর করে পরিবর্তিত হতে পারে, এখানে একটি উদাহরণ:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

    Context mContext;
    List<String> mNames;

    public RecyclerAdapter(Context context, List<String> names) {
        mContext = context;
        mNames = names;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext())
                .inflate(android.R.layout.simple_list_item_1, viewGroup, false);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        //Populate.
        if (mNames != null) {
            String name = mNames.get(position);

            viewHolder.name.setText(name);
        }
    }

    @Override
    public int getItemCount() {

        if (mNames != null)
            return mNames.size();
        else
            return 0;
    }

    /**
     * Static Class that holds the RecyclerView views. 
     */
    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView name;

        public ViewHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(android.R.id.text1);
        }
    }
}

আপনার যদি কাজ RecyclerView.ViewHolderকরতে কোনও সমস্যা হয় তবে তা নিশ্চিত করুন যে আপনার যথাযথ নির্ভরতা রয়েছে যা আপনি সর্বদা গ্রেডল দয়া করে যাচাই করতে পারেন

আশা করি এটি আপনার সমস্যার সমাধান করেছে।


1

এটি আমাকে আরও মসৃণ স্ক্রোলিং পেতে সহায়তা করেছে:

অ্যাডাপ্টারে ওফেলডটোরাইসাইকেল ভিউ (ভিউহোল্ডারধারক) ওভাররাইড করুন

এবং চলমান অ্যানিমেশনগুলি (যদি থাকে) ধারককে বন্ধ করুন "" অ্যানিমিটভিউ "cle

সত্য ফিরে যেতে মনে রাখবেন;


1

আমি কোডের এই লাইনে এটি সমাধান করেছি

recyclerView.setNestedScrollingEnabled(false);

1

বাইন্ড ভিউহোল্ডারটিতে @ গালিয়ার উত্তরে যুক্ত করা হচ্ছে, আমি Html.fromHtml () পদ্ধতি ব্যবহার করছিলাম। স্পষ্টতই এটির কার্যকারিতা প্রভাব রয়েছে।


0

i পিকাসো লাইব্রেরিতে একমাত্র লাইন ব্যবহার করে এই সমস্যাটি সমাধান করুন

.ফিট ()

Picasso.get().load(currentItem.getArtist_image())

                    .fit()//this wil auto get the size of image and reduce it 

                    .placeholder(R.drawable.ic_doctor)
                    .into(holder.img_uploaderProfile, new Callback() {
                        @Override
                        public void onSuccess() {


                        }

                        @Override
                        public void onError(Exception e) {
                            Toast.makeText(context, "Something Happend Wrong Uploader Image", Toast.LENGTH_LONG).show();
                        }
                    });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.