খুব মজার প্রশ্ন। আমি মনে করি এটি মূলত একটি অর্থপূর্ণ অর্থ, এবং এটি historicalতিহাসিক কারণেও হতে পারে।
যদিও বর্তমান অ্যান্ড্রয়েড ক্রিয়াকলাপ এবং পরিষেবা বাস্তবায়নে, getApplication()
এবং getApplicationContext()
একই জিনিসটি ফেরত দেয়, এমন কোনও গ্যারান্টি নেই যে এটি সর্বদা ঘটবে (উদাহরণস্বরূপ, কোনও নির্দিষ্ট বিক্রেতা বাস্তবায়নে)।
সুতরাং আপনি যদি ম্যানিফেস্টে নিবন্ধিত অ্যাপ্লিকেশন শ্রেণিটি চান তবে আপনার কল করে কখনইgetApplicationContext()
এটি আপনার অ্যাপ্লিকেশনটিতে কাস্ট করা উচিত নয় , কারণ এটি অ্যাপ্লিকেশন উদাহরণ হতে পারে না (যা আপনি পরীক্ষার কাঠামোর সাথে স্পষ্টতই অভিজ্ঞতা পেয়েছিলেন)।
কেন getApplicationContext()
প্রথম স্থানে আছে?
getApplication()
কেবলমাত্র ক্রিয়াকলাপ শ্রেণি এবং পরিষেবা শ্রেণিতে উপলভ্য, যেখানে getApplicationContext()
প্রসঙ্গ শ্রেণিতে ঘোষণা করা হয়েছে।
এর প্রকৃত অর্থ একটি জিনিস: যখন কোনও ব্রডকাস্ট রিসিভারে কোড লেখার সময়, যা কোনও প্রসঙ্গ নয় তবে তার অন-রিসিভ পদ্ধতিতে একটি প্রসঙ্গ দেওয়া হয়, আপনি কেবল কল করতে পারেন getApplicationContext()
। যার অর্থ হ'ল ব্রডকাস্টার্সিভারে আপনার অ্যাপ্লিকেশনটিতে অ্যাক্সেস পাওয়ার নিশ্চয়তা নেই।
অ্যান্ড্রয়েড কোডটি দেখার সময় আপনি দেখতে পাবেন যে সংযুক্ত থাকাকালীন কোনও ক্রিয়াকলাপটি একটি বেস প্রসঙ্গ এবং একটি অ্যাপ্লিকেশন গ্রহণ করে এবং সেগুলি বিভিন্ন পরামিতি। getApplicationContext()
প্রতিনিধিদের এটি কল baseContext.getApplicationContext()
।
আরও একটি জিনিস: ডকুমেন্টেশনটি বলছে যে এটি বেশিরভাগ ক্ষেত্রেই আপনার সাবক্লাস অ্যাপ্লিকেশন প্রয়োজন হবে না:
সাধারণত সাবক্লাস করার প্রয়োজন নেই Application
। বেশিরভাগ পরিস্থিতিতে স্থিতিশীল সিঙ্গলেটগুলি আরও কার্যকরভাবে একই কার্যকারিতা সরবরাহ করতে পারে। যদি আপনার সিঙ্গলটনের কোনও বৈশ্বিক প্রসঙ্গের প্রয়োজন হয় (উদাহরণস্বরূপ ব্রডকাস্ট রিসিভারগুলি নিবন্ধিত করতে), এটি পুনরুদ্ধার করার জন্য ফাংশনটি প্রথমে সিঙ্গেলটন নির্মাণের সময় Context
অভ্যন্তরীণভাবে ব্যবহার করা যেতে পারে
Context.getApplicationContext()
।
আমি জানি এটি একটি সঠিক এবং সুনির্দিষ্ট উত্তর নয়, তবে এখনও, এটি কি আপনার প্রশ্নের উত্তর দেয়?
Application
।