অ্যান্ড্রয়েড জেটপ্যাকের অ্যাপ স্টার্টআপ অংশ।

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

প্রতিটি কম্পোনেন্টের জন্য আলাদা কন্টেন্ট প্রোভাইডারকে সংজ্ঞায়িত করার পরিবর্তে, অ্যাপ স্টার্টআপ আপনাকে কম্পোনেন্ট ইনিশিয়ালাইজার সংজ্ঞায়িত করতে দেয় যা একটি একক কন্টেন্ট প্রোভাইডার শেয়ার করে। এটি অ্যাপ শুরুর সময়কে উল্লেখযোগ্যভাবে উন্নত করতে পারে।

সেটআপ

আপনার লাইব্রেরি বা অ্যাপে Jetpack Startup ব্যবহার করতে, আপনার Gradle ফাইলে নিম্নলিখিত যোগ করুন:

গ্রোভি

dependencies {
    implementation "androidx.startup:startup-runtime:1.1.1"
}

কোটলিন

dependencies {
    implementation("androidx.startup:startup-runtime:1.1.1")
}

অ্যাপ স্টার্টআপে উপাদানগুলি শুরু করুন

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

স্টার্টআপে স্বয়ংক্রিয়ভাবে উপাদানগুলি শুরু করতে অ্যাপ স্টার্টআপ ব্যবহার করতে, আপনাকে অবশ্যই প্রতিটি উপাদানের জন্য একটি কম্পোনেন্ট ইনিশিয়ালাইজার সংজ্ঞায়িত করতে হবে যা অ্যাপটিকে আরম্ভ করতে হবে।

কম্পোনেন্ট ইনিশিয়ালাইজার প্রয়োগ করুন

আপনি একটি ক্লাস তৈরি করে প্রতিটি কম্পোনেন্ট ইনিশিয়ালাইজারকে সংজ্ঞায়িত করেন যা 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 এর নির্ভরতা।

মতামত প্রদান করুন

এই সম্পদগুলির মাধ্যমে আমাদের সাথে আপনার প্রতিক্রিয়া এবং ধারণা শেয়ার করুন:

সমস্যা অনুসরণকারী
সমস্যাগুলি রিপোর্ট করুন যাতে আমরা বাগগুলি ঠিক করতে পারি৷
{% শব্দার্থে %} {% endverbatim %} {% শব্দার্থে %} {% endverbatim %}