অ্যান্ড্রয়েড জেটপ্যাকের অ্যাপ স্টার্টআপ অংশ।
অ্যাপ স্টার্টআপ লাইব্রেরি অ্যাপ্লিকেশান স্টার্টআপে উপাদানগুলি শুরু করার জন্য একটি সরল, কার্যকরী উপায় সরবরাহ করে। লাইব্রেরি ডেভেলপার এবং অ্যাপ ডেভেলপার উভয়ই অ্যাপ স্টার্টআপ ব্যবহার করতে পারে স্টার্টআপ সিকোয়েন্সগুলিকে স্ট্রীমলাইন করতে এবং সুস্পষ্টভাবে শুরুর ক্রম সেট করতে।
প্রতিটি কম্পোনেন্টের জন্য আলাদা কন্টেন্ট প্রোভাইডারকে সংজ্ঞায়িত করার পরিবর্তে, অ্যাপ স্টার্টআপ আপনাকে কম্পোনেন্ট ইনিশিয়ালাইজার সংজ্ঞায়িত করতে দেয় যা একটি একক কন্টেন্ট প্রোভাইডার শেয়ার করে। এটি অ্যাপ শুরুর সময়কে উল্লেখযোগ্যভাবে উন্নত করতে পারে।
সেটআপ
আপনার লাইব্রেরি বা অ্যাপে Jetpack Startup ব্যবহার করতে, আপনার Gradle ফাইলে নিম্নলিখিত যোগ করুন:
গ্রোভি
dependencies { implementation "androidx.startup:startup-runtime:1.2.0" }
কোটলিন
dependencies { implementation("androidx.startup:startup-runtime:1.2.0") }
অ্যাপ স্টার্টআপে উপাদানগুলি শুরু করুন
অ্যাপস এবং লাইব্রেরিগুলি প্রায়শই অ্যাপ শুরু হওয়ার সাথে সাথে উপাদানগুলি শুরু করার উপর নির্ভর করে। আপনি প্রতিটি নির্ভরতা শুরু করার জন্য সামগ্রী সরবরাহকারীদের ব্যবহার করে এই প্রয়োজনটি পূরণ করতে পারেন, তবে বিষয়বস্তু সরবরাহকারীরা তাৎক্ষণিকভাবে ব্যয়বহুল এবং অপ্রয়োজনীয়ভাবে স্টার্টআপ সিকোয়েন্সকে ধীর করে দিতে পারে। উপরন্তু, অ্যান্ড্রয়েড একটি অনির্ধারিত ক্রমে কন্টেন্ট প্রদানকারীদের আরম্ভ করে। অ্যাপ স্টার্টআপ অ্যাপ স্টার্টআপে উপাদানগুলি শুরু করার এবং তাদের নির্ভরতাগুলি স্পষ্টভাবে সংজ্ঞায়িত করার আরও কার্যকর উপায় সরবরাহ করে।
স্টার্টআপে স্বয়ংক্রিয়ভাবে উপাদানগুলি শুরু করতে অ্যাপ স্টার্টআপ ব্যবহার করতে, আপনাকে অবশ্যই প্রতিটি উপাদানের জন্য একটি কম্পোনেন্ট ইনিশিয়ালাইজার সংজ্ঞায়িত করতে হবে যা অ্যাপটিকে আরম্ভ করতে হবে।
কম্পোনেন্ট ইনিশিয়ালাইজার প্রয়োগ করুন
আপনি একটি ক্লাস তৈরি করে প্রতিটি কম্পোনেন্ট ইনিশিয়ালাইজারকে সংজ্ঞায়িত করেন যা Initializer<T>
ইন্টারফেস প্রয়োগ করে। এই ইন্টারফেস দুটি গুরুত্বপূর্ণ পদ্ধতি সংজ্ঞায়িত করে:
-
create()
পদ্ধতি, যেটিতে কম্পোনেন্ট আরম্ভ করার জন্য প্রয়োজনীয় সমস্ত ক্রিয়াকলাপ রয়েছে এবংT
এর একটি উদাহরণ প্রদান করে। -
dependencies()
পদ্ধতি, যা ইনিশিয়ালাইজার নির্ভর করে এমন অন্যান্যInitializer<T>
অবজেক্টের একটি তালিকা প্রদান করে। স্টার্টআপের সময় অ্যাপটি যে ক্রমানুসারে ইনিশিয়ালাইজার চালায় তা নিয়ন্ত্রণ করতে আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন।
উদাহরণস্বরূপ, ধরুন যে আপনার অ্যাপটি WorkManager
উপর নির্ভর করে এবং এটিকে স্টার্টআপে আরম্ভ করতে হবে। একটি WorkManagerInitializer
ক্লাস সংজ্ঞায়িত করুন যা Initializer<WorkManager>
প্রয়োগ করে :
কোটলিন
// Initializes WorkManager. class WorkManagerInitializer : Initializer<WorkManager> { override fun create(context: Context): WorkManager { val configuration = Configuration.Builder().build() WorkManager.initialize(context, configuration) return WorkManager.getInstance(context) } override fun dependencies(): List<Class<out Initializer<*>>> { // No dependencies on other libraries. return emptyList() } }
জাভা
// Initializes WorkManager. class WorkManagerInitializer implements Initializer<WorkManager> { @Override public WorkManager create(Context context) { Configuration configuration = Configuration.Builder().build(); WorkManager.initialize(context, configuration); return WorkManager.getInstance(context); } @Override public List<Class<Initializer<?>>> dependencies() { // No dependencies on other libraries. return emptyList(); } }
dependencies()
পদ্ধতি একটি খালি তালিকা প্রদান করে কারণ WorkManager
অন্য কোনো লাইব্রেরির উপর নির্ভর করে না।
ধরুন যে আপনার অ্যাপটি ExampleLogger
নামক একটি লাইব্রেরির উপরও নির্ভর করে, যা ফলস্বরূপ WorkManager
উপর নির্ভর করে। এই নির্ভরতার অর্থ হল আপনাকে নিশ্চিত করতে হবে যে অ্যাপ স্টার্টআপ প্রথমে WorkManager
শুরু করে। একটি ExampleLoggerInitializer
ক্লাস সংজ্ঞায়িত করুন যা Initializer<ExampleLogger>
প্রয়োগ করে :
কোটলিন
// Initializes ExampleLogger. class ExampleLoggerInitializer : Initializer<ExampleLogger> { override fun create(context: Context): ExampleLogger { // WorkManager.getInstance() is non-null only after // WorkManager is initialized. return ExampleLogger(WorkManager.getInstance(context)) } override fun dependencies(): List<Class<out Initializer<*>>> { // Defines a dependency on WorkManagerInitializer so it can be // initialized after WorkManager is initialized. return listOf(WorkManagerInitializer::class.java) } }
জাভা
// Initializes ExampleLogger. class ExampleLoggerInitializer implements Initializer<ExampleLogger> { @Override public ExampleLogger create(Context context) { // WorkManager.getInstance() is non-null only after // WorkManager is initialized. return ExampleLogger(WorkManager.getInstance(context)); } @Override public List<Class<Initializer<?>>> dependencies() { // Defines a dependency on WorkManagerInitializer so it can be // initialized after WorkManager is initialized. return Arrays.asList(WorkManagerInitializer.class); } }
যেহেতু আপনি dependencies()
পদ্ধতিতে WorkManagerInitializer
অন্তর্ভুক্ত করেছেন, তাই অ্যাপ স্টার্টআপ ExampleLogger
এর আগে WorkManager
শুরু করে।
ম্যানিফেস্ট এন্ট্রি সেট আপ করুন
অ্যাপ স্টার্টআপে InitializationProvider
নামে একটি বিশেষ কন্টেন্ট প্রদানকারী অন্তর্ভুক্ত থাকে যা এটি আপনার কম্পোনেন্ট ইনিশিয়ালাইজারদের আবিষ্কার ও কল করতে ব্যবহার করে। অ্যাপ স্টার্টআপ প্রথমে InitializationProvider
ম্যানিফেস্ট এন্ট্রির অধীনে একটি <meta-data>
এন্ট্রি পরীক্ষা করে কম্পোনেন্ট ইনিশিয়ালাইজার আবিষ্কার করে। তারপরে, অ্যাপ স্টার্টআপ যেকোন ইনিশিয়ালাইজারের জন্য dependencies()
পদ্ধতিগুলিকে কল করে যা এটি ইতিমধ্যেই আবিষ্কার করেছে।
এর মানে হল যে অ্যাপ স্টার্টআপের মাধ্যমে একটি কম্পোনেন্ট ইনিশিয়েলাইজার আবিষ্কারযোগ্য হওয়ার জন্য, নিম্নলিখিত শর্তগুলির মধ্যে একটি অবশ্যই পূরণ করতে হবে:
-
InitializationProvider
ম্যানিফেস্ট এন্ট্রির অধীনে কম্পোনেন্ট ইনিশিয়ালাইজারের একটি সংশ্লিষ্ট<meta-data>
এন্ট্রি রয়েছে। - কম্পোনেন্ট ইনিশিয়ালাইজার একটি ইনিশিয়ালাইজার থেকে
dependencies()
পদ্ধতিতে তালিকাভুক্ত করা হয়েছে যা ইতিমধ্যেই আবিষ্কারযোগ্য।
WorkManagerInitializer
এবং ExampleLoggerInitializer
এর সাথে উদাহরণটি আবার বিবেচনা করুন। অ্যাপ স্টার্টআপ এই ইনিশিয়ালাইজারগুলি আবিষ্কার করতে পারে তা নিশ্চিত করতে, ম্যানিফেস্ট ফাইলে নিম্নলিখিতগুলি যুক্ত করুন:
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<!-- This entry makes ExampleLoggerInitializer discoverable. -->
<meta-data android:name="com.example.ExampleLoggerInitializer"
android:value="androidx.startup" />
</provider>
WorkManagerInitializer
এর জন্য আপনাকে <meta-data>
এন্ট্রি যোগ করতে হবে না, কারণ WorkManagerInitializer
হল ExampleLoggerInitializer
এর নির্ভরতা। এর মানে হল যে যদি ExampleLoggerInitializer
আবিষ্কারযোগ্য হয়, তাহলে WorkManagerInitializer
ও তাই।
tools:node="merge"
অ্যাট্রিবিউট নিশ্চিত করে যে ম্যানিফেস্ট মার্জার টুল সঠিকভাবে কোনো বিরোধপূর্ণ এন্ট্রির সমাধান করে।
লিন্ট চেক চালান
অ্যাপ স্টার্টআপ লাইব্রেরিতে লিন্ট নিয়মের একটি সেট রয়েছে যা আপনি আপনার কম্পোনেন্ট ইনিশিয়ালাইজার সঠিকভাবে সংজ্ঞায়িত করেছেন কিনা তা পরীক্ষা করতে ব্যবহার করতে পারেন। আপনি কমান্ড লাইন থেকে ./gradlew :app:lintDebug
চালিয়ে এই লিন্ট চেকগুলি সম্পাদন করতে পারেন।
ম্যানুয়ালি উপাদান আরম্ভ করুন
সাধারণত আপনি যখন অ্যাপ স্টার্টআপ ব্যবহার করেন, তখন InitializationProvider
অবজেক্ট অ্যাপ স্টার্টআপে কম্পোনেন্ট ইনিশিয়ালাইজারকে স্বয়ংক্রিয়ভাবে আবিষ্কার করতে এবং চালানোর জন্য AppInitializer
নামক একটি সত্তা ব্যবহার করে। যাইহোক, আপনি ম্যানুয়ালি উপাদানগুলি শুরু করার জন্য সরাসরি AppInitializer
ব্যবহার করতে পারেন যা আপনার অ্যাপের স্টার্টআপে প্রয়োজন হয় না। এটিকে অলস প্রাথমিককরণ বলা হয় এবং এটি স্টার্টআপ খরচ কমাতে সাহায্য করতে পারে।
আপনি ম্যানুয়ালি আরম্ভ করতে চান এমন যেকোনো উপাদানের জন্য আপনাকে প্রথমে স্বয়ংক্রিয় সূচনা নিষ্ক্রিয় করতে হবে।
একটি পৃথক উপাদানের জন্য স্বয়ংক্রিয় সূচনা অক্ষম করুন
একটি একক উপাদানের জন্য স্বয়ংক্রিয় সূচনা নিষ্ক্রিয় করতে, ম্যানিফেস্ট থেকে সেই উপাদানটির সূচনাকারীর জন্য <meta-data>
এন্ট্রি সরিয়ে দিন।
উদাহরণস্বরূপ, ম্যানিফেস্ট ফাইলে নিম্নলিখিত যোগ করা ExampleLogger
এর জন্য স্বয়ংক্রিয় সূচনা নিষ্ক্রিয় করে:
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data android:name="com.example.ExampleLoggerInitializer"
tools:node="remove" />
</provider>
মার্জার টুল অন্য সমস্ত মার্জ করা ম্যানিফেস্ট ফাইল থেকে এন্ট্রিকে সরিয়ে দেয় তা নিশ্চিত করার জন্য আপনি এন্ট্রিটি সরানোর পরিবর্তে এন্ট্রিতে tools:node="remove"
ব্যবহার করেন।
সমস্ত উপাদানের জন্য স্বয়ংক্রিয় সূচনা নিষ্ক্রিয় করুন
সমস্ত স্বয়ংক্রিয় সূচনা অক্ষম করতে, ম্যানিফেস্ট থেকে InitializationProvider
জন্য সম্পূর্ণ এন্ট্রিটি সরান:
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
ম্যানুয়ালি কম্পোনেন্ট ইনিশিয়ালাইজারকে কল করুন
যদি কোনো কম্পোনেন্টের জন্য স্বয়ংক্রিয় সূচনা নিষ্ক্রিয় করা থাকে, তাহলে আপনি সেই উপাদানটি এবং এর নির্ভরতা ম্যানুয়ালি আরম্ভ করতে AppInitializer
ব্যবহার করতে পারেন।
উদাহরণস্বরূপ, নিম্নলিখিত কোডটি AppInitializer
কল করে এবং নিজে ExampleLogger
শুরু করে:
কোটলিন
AppInitializer.getInstance(context) .initializeComponent(ExampleLoggerInitializer::class.java)
জাভা
AppInitializer.getInstance(context) .initializeComponent(ExampleLoggerInitializer.class);
ফলস্বরূপ, অ্যাপ স্টার্টআপ WorkManager
ও শুরু করে কারণ WorkManager
হল ExampleLogger
এর নির্ভরতা।
মতামত প্রদান
এই সম্পদগুলির মাধ্যমে আমাদের সাথে আপনার প্রতিক্রিয়া এবং ধারণা শেয়ার করুন:
- ইস্যু ট্র্যাকার
- সমস্যাগুলি রিপোর্ট করুন যাতে আমরা বাগগুলি ঠিক করতে পারি৷
আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক টেক্সট প্রদর্শিত হয়
- অ্যাপ আর্কিটেকচার: ডেটা লেয়ার - ওয়ার্ক ম্যানেজার - অ্যান্ড্রয়েড ডেভেলপারদের সাথে টাস্ক শিডিউল করুন
- অ্যাপ আর্কিটেকচার: ডেটা লেয়ার - ডেটাস্টোর - অ্যান্ড্রয়েড বিকাশকারী