স্থিতিশীলতার সমস্যা নির্ণয় করুন

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

লেআউট ইন্সপেক্টর

অ্যান্ড্রয়েড স্টুডিওতে লেআউট ইন্সপেক্টর আপনাকে দেখতে দেয় যে আপনার অ্যাপে কোন কম্পোজেবলগুলি পুনরায় কম্পোজ করা হচ্ছে। এটি কম্পোজ কতবার একটি উপাদান পুনর্গঠন বা এড়িয়ে গেছে তার গণনা প্রদর্শন করে।

লেআউট ইন্সপেক্টরে পুনর্গঠন এবং এড়িয়ে যাওয়া গণনা

কম্পাইলার রিপোর্ট রচনা করুন

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

সেটআপ

কম্পোজ কম্পাইলার রিপোর্ট ডিফল্টরূপে সক্রিয় করা হয় না। আপনি একটি কম্পাইলার পতাকা দিয়ে তাদের সক্রিয় করতে পারেন. সঠিক সেটআপ আপনার প্রকল্পের উপর নির্ভর করে পরিবর্তিত হয়, তবে কম্পোজ কম্পাইলার গ্রেডল প্লাগইন ব্যবহার করে প্রকল্পগুলির জন্য আপনি প্রতিটি মডিউল build.gradle ফাইলে নিম্নলিখিত যোগ করতে পারেন।

  android { ... }

  composeCompiler {
    reportsDestination = layout.buildDirectory.dir("compose_compiler")
    metricsDestination = layout.buildDirectory.dir("compose_compiler")
  }

আপনার প্রজেক্ট তৈরি করার সময় এখন কম্পাইলার রিপোর্ট তৈরি করা হবে।

উদাহরণ আউটপুট

reportsDestination তিনটি ফাইল আউটপুট. JetSnack থেকে নিম্নলিখিত উদাহরণ আউটপুট.

  • <modulename>-classes.txt : এই মডিউলে ক্লাসের স্থিতিশীলতার উপর একটি প্রতিবেদন। নমুনা
  • <modulename>-composables.txt : মডিউলে কম্পোজেবলগুলি কীভাবে পুনরায় চালু করা যায় এবং এড়ানো যায় তার একটি প্রতিবেদন। নমুনা
  • <modulename>-composables.csv : কম্পোজেবল রিপোর্টের একটি CSV সংস্করণ যা আপনি স্প্রেডশীটে আমদানি করতে পারেন বা স্ক্রিপ্ট ব্যবহার করে প্রক্রিয়াকরণ করতে পারেন। নমুনা

কম্পোজেবল রিপোর্ট

composables.txt ফাইলটি প্রদত্ত মডিউলের জন্য প্রতিটি সংমিশ্রণযোগ্য ফাংশনের বিবরণ দেয়, তাদের পরামিতির স্থায়িত্ব সহ, এবং সেগুলি পুনরায় চালু করা যায় বা এড়ানো যায় কিনা। নিম্নলিখিত JetSnack থেকে একটি অনুমানমূলক উদাহরণ:

restartable skippable scheme("[androidx.compose.ui.UiComposable]") fun SnackCollection(
  stable snackCollection: SnackCollection
  stable onSnackClick: Function1<Long, Unit>
  stable modifier: Modifier? = @static Companion
  stable index: Int = @static 0
  stable highlight: Boolean = @static true
)

এই SnackCollection composable সম্পূর্ণরূপে পুনরায় চালু করা যায়, এড়ানো যায় এবং স্থিতিশীল। এটি সাধারণত বাঞ্ছনীয়, যদিও অবশ্যই বাধ্যতামূলক নয়।

অন্যদিকে, আরেকটা উদাহরণ দেখা যাক।

restartable scheme("[androidx.compose.ui.UiComposable]") fun HighlightedSnacks(
  stable index: Int
  unstable snacks: List<Snack>
  stable onSnackClick: Function1<Long, Unit>
  stable modifier: Modifier? = @static Companion
)

HighlightedSnacks কম্পোজেবল এড়ানো যায় না। পুনর্গঠনের সময় কম্পোজ কখনই এড়িয়ে যায় না। এটির কোনো প্যারামিটার পরিবর্তিত না হলেও এটি ঘটে। এর কারণ হল unstable প্যারামিটার, snacks

ক্লাস রিপোর্ট

classes.txt ফাইলটিতে প্রদত্ত মডিউলের ক্লাসগুলির অনুরূপ প্রতিবেদন রয়েছে। নিম্নলিখিত স্নিপেট হল ক্লাস Snack জন্য আউটপুট:

unstable class Snack {
  stable val id: Long
  stable val name: String
  stable val imageUrl: String
  stable val price: Long
  stable val tagline: String
  unstable val tags: Set<String>
  <runtime stability> = Unstable
}

রেফারেন্সের জন্য, নিচের Snack এর সংজ্ঞা হল:

data class Snack(
    val id: Long,
    val name: String,
    val imageUrl: String,
    val price: Long,
    val tagline: String = "",
    val tags: Set<String> = emptySet()
)

কম্পোজ কম্পাইলার Snack অস্থির হিসাবে চিহ্নিত করেছে। কারণ tags প্যারামিটারের ধরন হল Set<String> । এটি একটি অপরিবর্তনীয় প্রকার, এটি একটি MutableSet নয়। যাইহোক, স্ট্যান্ডার্ড কালেকশন ক্লাস যেমন Set, List এবং Map শেষ পর্যন্ত ইন্টারফেস। যেমন, অন্তর্নিহিত বাস্তবায়ন এখনও পরিবর্তনযোগ্য হতে পারে।

উদাহরণস্বরূপ, আপনি val set: Set<String> = mutableSetOf("foo") পরিবর্তনশীলটি ধ্রুবক এবং এর ঘোষিত প্রকার পরিবর্তনযোগ্য নয়, তবে এটির বাস্তবায়ন এখনও পরিবর্তনযোগ্য। কম্পোজ কম্পাইলার এই শ্রেণীর অপরিবর্তনীয়তা সম্পর্কে নিশ্চিত হতে পারে না কারণ এটি শুধুমাত্র ঘোষিত প্রকার দেখতে পায়। তাই এটি tags অস্থির হিসাবে চিহ্নিত করে৷