এটি একটি খুব ভাল প্রশ্ন, ইস্যুটি পুরোপুরি বোঝার জন্য অ্যান্ড্রয়েড প্রোগ্রামার হিসাবে সময় লাগে। প্রকৃতপক্ষে অ্যাসিঙ্কটাসকের দুটি প্রধান সমস্যা সম্পর্কিত যা সম্পর্কিত:
- এগুলি ক্রিয়াকলাপের জীবনচক্রের সাথে খারাপভাবে আবদ্ধ
- তারা খুব সহজেই মেমরি ফাঁস তৈরি করে।
ইনসাইড RoboSpice (প্রেরণাগুলি অ্যাপ্লিকেশন Google Play তে প্রাপ্তিসাধ্য ) আমরা বিস্তারিতভাবে এই প্রশ্নের উত্তর। এটি AsyncTasks, লোডারগুলি, তাদের বৈশিষ্ট্যগুলি এবং অসুবিধাগুলির একটি গভীরতর দর্শন দেবে এবং আপনাকে নেটওয়ার্ক অনুরোধগুলির বিকল্প সমাধানের সাথে পরিচয় করিয়ে দেবে: রোবস্পাইস। নেটওয়ার্ক অনুরোধগুলি অ্যান্ড্রয়েডে একটি সাধারণ প্রয়োজন এবং প্রকৃতির দীর্ঘায়িত ক্রিয়াকলাপ। অ্যাপ্লিকেশনটির একটি অংশ এখানে দেওয়া হয়েছে:
অ্যাসিঙ্কটাস্ক এবং ক্রিয়াকলাপের জীবন চক্র
অ্যাসিঙ্কটাস্কগুলি ক্রিয়াকলাপের দৃষ্টান্তগুলির জীবনচক্র অনুসরণ করে না। যদি আপনি কোনও ক্রিয়াকলাপের মধ্যে অ্যাসিঙ্কটাস্ক শুরু করেন এবং আপনি ডিভাইসটি ঘোরান, ক্রিয়াকলাপটি ধ্বংস হয়ে যাবে এবং একটি নতুন উদাহরণ তৈরি করা হবে। তবে অ্যাসিঙ্কটাস্ক মারা যাবে না। এটি সম্পূর্ণ না হওয়া অবধি বেঁচে থাকবে।
এবং এটি শেষ হলে, অ্যাসিঙ্কটাস্ক নতুন ক্রিয়াকলাপের UI আপডেট করবে না। প্রকৃতপক্ষে এটি ক্রিয়াকলাপের পূর্ববর্তী উদাহরণটি আপডেট করে যা আর প্রদর্শিত হয় না। এটি java.lang.IllegalArgumentException টাইপটির ব্যতিক্রম হতে পারে: যদি আপনি ক্রিয়াকলাপের ভিতরে কোনও ভিউ পুনরুদ্ধার করতে উইন্ডো ম্যানেজারের সাথে সংযুক্ত না হন তবে দেখুন find
স্মৃতি ফাঁস ইস্যু
আপনার ক্রিয়াকলাপের অভ্যন্তরীণ ক্লাস হিসাবে অ্যাসিঙ্কটাস্ক তৈরি করা খুব সুবিধাজনক। অ্যাসিঙ্কটাস্ককে যখন কার্য সম্পূর্ণ হয় বা অগ্রগতি হয় তখন ক্রিয়াকলাপের দৃষ্টিভঙ্গিগুলি পরিচালনা করতে হবে, ক্রিয়াকলাপের অভ্যন্তরীণ শ্রেণিটি ব্যবহার করা সুবিধাজনক বলে মনে হয়: অভ্যন্তরীণ শ্রেণীগুলি বাইরের শ্রেণীর যে কোনও ক্ষেত্রে সরাসরি অ্যাক্সেস করতে পারে।
তবুও, এর অর্থ এই যে অভ্যন্তরীণ শ্রেণি তার বহিরাগত শ্রেণীর উদাহরণের উপরে একটি অদৃশ্য রেফারেন্স রাখবে: ক্রিয়াকলাপ।
দীর্ঘমেয়াদে, এটি একটি মেমরি ফুটো সৃষ্টি করে: যদি অ্যাসিঙ্কটাস্ক দীর্ঘস্থায়ী হয় তবে এটি ক্রিয়াকলাপটিকে "জীবিত" রাখে যেখানে অ্যান্ড্রয়েড আর প্রদর্শিত হতে পারে না বলে এটিকে এড়াতে চাইবে। ক্রিয়াকলাপটি আবর্জনা সংগ্রহ করা যায় না এবং এটি ডিভাইসে সংস্থান সংরক্ষণের জন্য অ্যান্ড্রয়েডের কেন্দ্রীয় ব্যবস্থা।
দীর্ঘকাল চলমান ক্রিয়াকলাপের জন্য অ্যাসিঙ্কটাস্ক ব্যবহার করা সত্যিই খুব খারাপ ধারণা। তবুও, তারা সংক্ষিপ্ত জীবনযাপনের জন্য ঠিক আছে যেমন 1 বা 2 সেকেন্ড পরে কোনও ভিউ আপডেট করে।
আমি আপনাকে রোবস্পাইস মোটিভেশন অ্যাপ্লিকেশন ডাউনলোড করতে উত্সাহিত করি , এটি সত্যই এটি গভীরতার সাথে ব্যাখ্যা করে এবং কিছু ব্যাকগ্রাউন্ড ক্রিয়াকলাপ করার বিভিন্ন উপায়ে নমুনা এবং প্রদর্শন সরবরাহ করে।
doInBackground
তা হ'ল প্রগতি বারটি ব্যবহার না করা থাকলে দীর্ঘকাল ধরে চলমান ফাংশনটি স্ক্রিনকে হিমিয়ে তোলে ।