আমার ক্রিয়াকলাপটি একটি সতর্কতা ডায়ালগ তৈরি করার চেষ্টা করছে যার জন্য পরামিতি হিসাবে একটি প্রবন্ধের প্রয়োজন। আমি যদি ব্যবহার করি তবে এটি প্রত্যাশার মতো কাজ করে:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
তবে ক্রিয়াকলাপের মতো ঘোরানোর মতো কার্যকলাপের পরেও যখন কার্যকলাপটি নষ্ট হয়ে যায় এবং পুনরায় তৈরি করা হয় তখন মেমরি ফাঁস হওয়ার সম্ভাবনার কারণে আমি "এটি" প্রসঙ্গ হিসাবে ব্যবহারের উদ্রেক করি। অ্যান্ড্রয়েড বিকাশকারী এর ব্লগে সম্পর্কিত পোস্ট থেকে :
প্রসঙ্গ-সম্পর্কিত মেমরি ফুটো এড়ানোর জন্য দুটি সহজ উপায় রয়েছে। সর্বাধিক সুস্পষ্ট একটি হ'ল তার নিজস্ব ক্ষেত্রের বাইরে প্রসঙ্গটি এড়িয়ে যাওয়া। উপরের উদাহরণটি স্থিতিশীল রেফারেন্সের ক্ষেত্রে দেখিয়েছে তবে অভ্যন্তরীণ শ্রেণিগুলি এবং বাইরের শ্রেণীর সাথে তাদের অন্তর্নিহিত রেফারেন্সটিও সমান বিপজ্জনক হতে পারে। দ্বিতীয় সমাধানটি হ'ল অ্যাপ্লিকেশন প্রসঙ্গটি ব্যবহার করা। আপনার অ্যাপ্লিকেশন জীবিত থাকাকালীন এই প্রসঙ্গটি বেঁচে থাকবে এবং ক্রিয়াকলাপের জীবনচক্রের উপর নির্ভর করে না। যদি আপনি দীর্ঘমেয়াদী অবজেক্টগুলি রাখার পরিকল্পনা করেন যা একটি প্রসঙ্গে প্রয়োজন, অ্যাপ্লিকেশন অবজেক্টটি মনে রাখবেন। আপনি Context.get ApplicationContext () বা Activity.get অ্যাপ্লিকেশন () এ কল করে সহজেই এটি অর্জন করতে পারেন।
তবে AlertDialog()
উভয়টির জন্য getApplicationContext()
বা getApplication()
প্রসঙ্গ হিসাবে গ্রহণযোগ্য নয় , কারণ এটি ব্যতিক্রম ছোঁড়ে:
"উইন্ডো যুক্ত করতে অক্ষম - টোকেন নাল কোনও অ্যাপ্লিকেশনের জন্য নয়"
প্রতি রেফারেন্স: 1 , 2 , 3 , ইত্যাদি
সুতরাং, এটিকে কি "বাগ" হিসাবে বিবেচনা করা উচিত, যেহেতু আমাদের আনুষ্ঠানিকভাবে ব্যবহার করার পরামর্শ দেওয়া হয়েছে Activity.getApplication()
এবং এখনও এটি বিজ্ঞাপন হিসাবে কাজ করে না?
জিম