কার্যক্রম পরিচিতি

Activity ক্লাস একটি অ্যান্ড্রয়েড অ্যাপের একটি গুরুত্বপূর্ণ উপাদান, এবং যেভাবে অ্যাক্টিভিটিগুলি চালু করা হয় এবং একত্রিত করা হয় তা হল প্ল্যাটফর্মের অ্যাপ্লিকেশন মডেলের একটি মৌলিক অংশ৷ প্রোগ্রামিং দৃষ্টান্তগুলির বিপরীতে যেখানে অ্যাপগুলি একটি main() পদ্ধতিতে চালু করা হয়, Android সিস্টেম তার জীবনচক্রের নির্দিষ্ট পর্যায়ের সাথে সামঞ্জস্যপূর্ণ নির্দিষ্ট কলব্যাক পদ্ধতি ব্যবহার করে একটি Activity উদাহরণে কোড শুরু করে।

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

কার্যক্রমের ধারণা

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

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

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

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

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

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

ম্যানিফেস্ট কনফিগার করা হচ্ছে

আপনার অ্যাপ্লিকেশান ক্রিয়াকলাপগুলি ব্যবহার করতে সক্ষম হওয়ার জন্য, আপনাকে অবশ্যই ক্রিয়াকলাপগুলি এবং তাদের নির্দিষ্ট বৈশিষ্ট্যগুলি ম্যানিফেস্টে ঘোষণা করতে হবে৷

কার্যক্রম ঘোষণা করুন

আপনার কার্যকলাপ ঘোষণা করতে, আপনার ম্যানিফেস্ট ফাইল খুলুন এবং <অ্যাপ্লিকেশন> উপাদানের একটি শিশু হিসাবে একটি <activity> উপাদান যোগ করুন। উদাহরণ স্বরূপ:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

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

দ্রষ্টব্য: আপনি আপনার অ্যাপ প্রকাশ করার পরে, আপনার কার্যকলাপের নাম পরিবর্তন করা উচিত নয়। যদি আপনি তা করেন, আপনি কিছু কার্যকারিতা ভেঙে দিতে পারেন, যেমন অ্যাপ শর্টকাট। প্রকাশের পরে এড়ানোর জন্য পরিবর্তনগুলি সম্পর্কে আরও তথ্যের জন্য, দেখুন যে জিনিসগুলি পরিবর্তন করা যায় না

অভিপ্রায় ফিল্টার ঘোষণা করুন

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

আপনি <activity> এলিমেন্টে একটি <intent-filter> অ্যাট্রিবিউট ঘোষণা করে এই বৈশিষ্ট্যটির সুবিধা নিতে পারেন। এই উপাদানটির সংজ্ঞা একটি <action> উপাদান এবং ঐচ্ছিকভাবে, একটি <শ্রেণী> উপাদান এবং/অথবা একটি <data> উপাদান অন্তর্ভুক্ত করে। এই উপাদানগুলিকে একত্রিত করে অভিপ্রায়ের ধরণ নির্দিষ্ট করতে যা আপনার কার্যকলাপ প্রতিক্রিয়া জানাতে পারে৷ উদাহরণস্বরূপ, নিম্নলিখিত কোড স্নিপেটটি দেখায় যে কীভাবে একটি কার্যকলাপ কনফিগার করতে হয় যা পাঠ্য ডেটা প্রেরণ করে এবং এটি করার জন্য অন্যান্য কার্যকলাপ থেকে অনুরোধ গ্রহণ করে:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

এই উদাহরণে, <action> উপাদানটি নির্দিষ্ট করে যে এই কার্যকলাপ ডেটা পাঠায়। <বিভাগ> উপাদানটিকে DEFAULT হিসাবে ঘোষণা করা কার্যকলাপটিকে লঞ্চের অনুরোধগুলি পেতে সক্ষম করে। <data> উপাদানটি এই কার্যকলাপটি যে ধরনের ডেটা পাঠাতে পারে তা নির্দিষ্ট করে। নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে উপরে বর্ণিত কার্যকলাপ কল করতে হয়:

কোটলিন

val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)

জাভা

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);
আপনি যদি আপনার অ্যাপটিকে স্বয়ংসম্পূর্ণ করতে চান এবং অন্য অ্যাপগুলিকে এর কার্যকলাপগুলি সক্রিয় করার অনুমতি না দেন তবে আপনার অন্য কোনও অভিপ্রায় ফিল্টারের প্রয়োজন নেই৷ যে ক্রিয়াকলাপগুলি আপনি অন্য অ্যাপ্লিকেশনগুলিতে উপলব্ধ করতে চান না সেগুলির কোনও উদ্দেশ্য ফিল্টার থাকা উচিত নয় এবং আপনি স্পষ্ট অভিপ্রায় ব্যবহার করে সেগুলি নিজেই শুরু করতে পারেন৷ আপনার ক্রিয়াকলাপগুলি কীভাবে অভিপ্রায়ে প্রতিক্রিয়া জানাতে পারে সে সম্পর্কে আরও তথ্যের জন্য, অভিপ্রায় এবং অভিপ্রায় ফিল্টারগুলি দেখুন।

অনুমতি ঘোষণা করুন

কোন অ্যাপ কোন নির্দিষ্ট কার্যকলাপ শুরু করতে পারে তা নিয়ন্ত্রণ করতে আপনি ম্যানিফেস্টের <activity> ট্যাগ ব্যবহার করতে পারেন। একটি অভিভাবক কার্যকলাপ একটি শিশু কার্যকলাপ চালু করতে পারে না যদি না উভয় কার্যকলাপ তাদের ম্যানিফেস্টে একই অনুমতি থাকে৷ আপনি যদি অভিভাবক কার্যকলাপের জন্য একটি <uses-permission> উপাদান ঘোষণা করেন, তাহলে প্রতিটি শিশুর কার্যকলাপে একটি মিলিত <uses-permission> উপাদান থাকতে হবে।

উদাহরণস্বরূপ, যদি আপনার অ্যাপ সোশ্যাল মিডিয়াতে একটি পোস্ট শেয়ার করার জন্য সোশ্যালঅ্যাপ নামের একটি অনুমানমূলক অ্যাপ ব্যবহার করতে চায়, তাহলে সোশ্যালঅ্যাপকে অবশ্যই সেই অনুমতি নির্ধারণ করতে হবে যেটি একটি অ্যাপকে কল করছে:

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

তারপরে, SocialApp কল করার অনুমতি পেতে, আপনার অ্যাপটিকে অবশ্যই SocialApp-এর ম্যানিফেস্টে সেট করা অনুমতির সাথে মেলে:

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

সাধারণভাবে অনুমতি এবং নিরাপত্তা সম্পর্কে আরও তথ্যের জন্য, নিরাপত্তা এবং অনুমতি দেখুন।

কার্যকলাপ জীবনচক্র পরিচালনা

তার জীবদ্দশায়, একটি কার্যকলাপ বিভিন্ন রাজ্যের মধ্য দিয়ে যায়। আপনি রাজ্যগুলির মধ্যে রূপান্তর পরিচালনা করতে কলব্যাকের একটি সিরিজ ব্যবহার করেন। নিম্নলিখিত বিভাগগুলি এই কলব্যাকগুলির পরিচয় দেয়৷

onCreate()

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

onCreate() শেষ হলে, পরবর্তী কলব্যাক সর্বদা onStart() হয়।

অনস্টার্ট()

onCreate() প্রস্থান করার সাথে সাথে, কার্যকলাপটি শুরু অবস্থায় প্রবেশ করে এবং কার্যকলাপটি ব্যবহারকারীর কাছে দৃশ্যমান হয়। এই কলব্যাকে অগ্রভাগে আসার এবং ইন্টারেক্টিভ হওয়ার জন্য কার্যকলাপের চূড়ান্ত প্রস্তুতির পরিমাণ রয়েছে৷

সারসংকলন()

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

onPause() কলব্যাক সবসময় onResume() অনুসরণ করে।

অনপজ()

যখন কার্যকলাপ ফোকাস হারায় এবং একটি বিরাম অবস্থায় প্রবেশ করে তখন সিস্টেমটি onPause() কল করে। এই অবস্থাটি ঘটে যখন, উদাহরণস্বরূপ, ব্যবহারকারী পিছনে বা সাম্প্রতিক বোতামটি ট্যাপ করে। যখন সিস্টেম আপনার কার্যকলাপের জন্য onPause() কল করে, তখন এর প্রযুক্তিগত অর্থ হল আপনার কার্যকলাপ এখনও আংশিকভাবে দৃশ্যমান, কিন্তু প্রায়শই এটি একটি ইঙ্গিত যে ব্যবহারকারী কার্যকলাপ ছেড়ে যাচ্ছেন এবং কার্যকলাপটি শীঘ্রই বন্ধ বা পুনঃসূচনা অবস্থায় প্রবেশ করবে।

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

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

একবার onPause() কার্যকর করা শেষ হলে, পরবর্তী কলব্যাকটি হয় onStop() অথবা onResume() হয়, কার্যকলাপটি বিরতি দেওয়া অবস্থায় প্রবেশ করার পরে কী ঘটে তার উপর নির্ভর করে।

অনস্টপ()

সিস্টেমটি onStop() কল করে যখন কার্যকলাপটি ব্যবহারকারীর কাছে আর দৃশ্যমান হয় না। এটি ঘটতে পারে কারণ ক্রিয়াকলাপটি ধ্বংস হয়ে যাচ্ছে, একটি নতুন কার্যকলাপ শুরু হচ্ছে বা একটি বিদ্যমান ক্রিয়াকলাপ একটি পুনঃসূচনা অবস্থায় প্রবেশ করছে এবং বন্ধ হওয়া কার্যকলাপকে কভার করছে৷ এই সব ক্ষেত্রে, বন্ধ কার্যকলাপ আর দৃশ্যমান হয় না.

সিস্টেম কল করে পরবর্তী কলব্যাকটি হয় onRestart() , যদি কার্যকলাপটি ব্যবহারকারীর সাথে যোগাযোগ করতে ফিরে আসে, অথবা onDestroy() দ্বারা যদি এই কার্যকলাপটি সম্পূর্ণরূপে বন্ধ হয়ে যায়।

অন ​​রিস্টার্ট()

সিস্টেমটি এই কলব্যাকের আহ্বান করে যখন স্টপড অবস্থায় একটি কার্যকলাপ পুনরায় চালু হতে চলেছে৷ onRestart() বন্ধ হওয়ার সময় থেকে কার্যকলাপের অবস্থা পুনরুদ্ধার করে।

এই কলব্যাকটি সর্বদা onStart() দ্বারা অনুসরণ করা হয়।

onDestroy()

একটি কার্যকলাপ ধ্বংস হওয়ার আগে সিস্টেম এই কলব্যাক আহ্বান করে।

এই কলব্যাক হল চূড়ান্ত যেটি কার্যকলাপ গ্রহণ করে। onDestroy() সাধারণত অ্যাক্টিভিটির সমস্ত রিসোর্স রিলিজ করা হয় তা নিশ্চিত করার জন্য প্রয়োগ করা হয় যখন অ্যাক্টিভিটি বা এটি ধারণকারী প্রক্রিয়াটি ধ্বংস হয়ে যায়।

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