অ্যান্ড্রয়েড রানটাইম (এআরটি) হল অ্যান্ড্রয়েডে অ্যাপ এবং কিছু সিস্টেম পরিষেবা দ্বারা ব্যবহৃত পরিচালিত রানটাইম। এআরটি এবং এর পূর্বসূরী ডালভিক মূলত অ্যান্ড্রয়েড প্রকল্পের জন্য বিশেষভাবে তৈরি করা হয়েছিল। রানটাইম হিসাবে ART ডালভিক এক্সিকিউটেবল (DEX) ফর্ম্যাট এবং DEX বাইটকোড স্পেসিফিকেশন কার্যকর করে।
ART এবং Dalvik হল সামঞ্জস্যপূর্ণ রানটাইম যা DEX বাইটকোড চলছে, তাই Dalvik-এর জন্য তৈরি করা অ্যাপগুলি ART-এর সাথে চলার সময় কাজ করা উচিত। যাইহোক, ডালভিকে কাজ করে এমন কিছু কৌশল ART-তে কাজ করে না। সবচেয়ে গুরুত্বপূর্ণ বিষয় সম্পর্কে তথ্যের জন্য, Android রানটাইম (ART) এ অ্যাপের আচরণ যাচাই করা দেখুন।
এআরটি বৈশিষ্ট্য
এখানে ART দ্বারা বাস্তবায়িত কিছু প্রধান বৈশিষ্ট্য রয়েছে।
আগাম-সময় (AOT) সংকলন
ART আগাম-সময় (AOT) সংকলন প্রবর্তন করে, যা অ্যাপের কর্মক্ষমতা উন্নত করতে পারে। ডালভিকের তুলনায় এআরটি-এর আরও কঠোর ইনস্টল-টাইম যাচাইকরণ রয়েছে।
ইন্সটল করার সময়, ART অন-ডিভাইস dex2oat টুল ব্যবহার করে অ্যাপ কম্পাইল করে। এই ইউটিলিটি DEX ফাইলগুলিকে ইনপুট হিসাবে গ্রহণ করে এবং লক্ষ্য ডিভাইসের জন্য একটি কম্পাইল করা অ্যাপ তৈরি করে। ইউটিলিটি অসুবিধা ছাড়াই সমস্ত বৈধ DEX ফাইল কম্পাইল করতে সক্ষম হওয়া উচিত। যাইহোক, কিছু পোস্ট-প্রসেসিং টুল অবৈধ ফাইল তৈরি করে যা ডালভিক সহ্য করতে পারে কিন্তু ART দ্বারা কম্পাইল করা যায় না। আরও তথ্যের জন্য, আবর্জনা সংগ্রহ সংক্রান্ত সমস্যাগুলি দেখুন।
উন্নত আবর্জনা সংগ্রহ
আবর্জনা সংগ্রহ (GC) খুব সম্পদ নিবিড়, যা একটি অ্যাপের কর্মক্ষমতা নষ্ট করতে পারে, যার ফলে ছিন্ন ডিসপ্লে, দুর্বল UI প্রতিক্রিয়াশীলতা এবং অন্যান্য সমস্যা হয়। ART বিভিন্ন উপায়ে আবর্জনা সংগ্রহের উন্নতি করে:
- একটি একক GC বিরতি সহ বেশিরভাগ সমবর্তী নকশা
- ব্যাকগ্রাউন্ড মেমরির ব্যবহার এবং ফ্র্যাগমেন্টেশন কমাতে সমসাময়িক কপি করা
- GC বিরতির দৈর্ঘ্য হিপ আকারের থেকে স্বাধীন
- সম্প্রতি বরাদ্দকৃত, স্বল্পস্থায়ী বস্তু পরিষ্কার করার বিশেষ ক্ষেত্রে কম মোট GC সময় সহ কালেক্টর
- উন্নত আবর্জনা সংগ্রহের এর্গোনমিক্স, সমসাময়িক আবর্জনা সংগ্রহকে আরও সময়োপযোগী করে, যা সাধারণ ব্যবহারের ক্ষেত্রে
GC_FOR_ALLOC
ইভেন্টগুলিকে অত্যন্ত বিরল করে তোলে
উন্নয়ন এবং ডিবাগিং উন্নতি
ART অ্যাপ ডেভেলপমেন্ট এবং ডিবাগিং উন্নত করতে বেশ কিছু বৈশিষ্ট্য অফার করে।
নমুনা প্রোফাইলার জন্য সমর্থন
ঐতিহাসিকভাবে, ডেভেলপাররা প্রোফাইলার হিসেবে ট্রেসভিউ টুল (অ্যাপ এক্সিকিউশন ট্রেস করার জন্য ডিজাইন করা) ব্যবহার করেছে। যদিও ট্রেসভিউ দরকারী তথ্য দেয়, ডালভিকের উপর এর ফলাফলগুলি প্রতি-পদ্ধতি-কল ওভারহেড দ্বারা তির্যক হয়েছে, এবং টুলটির ব্যবহার উল্লেখযোগ্যভাবে রান টাইম কর্মক্ষমতা প্রভাবিত করে।
ART একটি ডেডিকেটেড স্যাম্পলিং প্রোফাইলারের জন্য সমর্থন যোগ করে যার এই সীমাবদ্ধতা নেই। এটি উল্লেখযোগ্য স্লোডাউন ছাড়াই অ্যাপ এক্সিকিউশনের আরও সঠিক ভিউ দেয়। কিটক্যাট রিলিজে ডালভিকের জন্য ট্রেসভিউতে স্যাম্পলিং সমর্থন যোগ করা হয়েছে।
আরো ডিবাগিং বৈশিষ্ট্য জন্য সমর্থন
ART বেশ কিছু নতুন ডিবাগিং বিকল্প সমর্থন করে, বিশেষ করে মনিটর- এবং আবর্জনা সংগ্রহ-সম্পর্কিত কার্যকারিতায়। উদাহরণস্বরূপ, আপনি করতে পারেন:
- স্ট্যাক ট্রেসে কোন লকগুলি রাখা আছে তা দেখুন, তারপর একটি লক ধারণ করা থ্রেডে যান৷
- একটি প্রদত্ত শ্রেণীর কতগুলি লাইভ দৃষ্টান্ত রয়েছে তা জিজ্ঞাসা করুন, দৃষ্টান্তগুলি দেখতে বলুন এবং দেখুন কোন রেফারেন্সগুলি একটি বস্তুকে লাইভ রাখছে।
- একটি নির্দিষ্ট উদাহরণের জন্য ইভেন্টগুলি (যেমন ব্রেকপয়েন্ট) ফিল্টার করুন।
- প্রস্থান করার সময় একটি পদ্ধতি দ্বারা প্রত্যাবর্তিত মান দেখুন ("পদ্ধতি-প্রস্থান" ইভেন্ট ব্যবহার করে)।
- একটি নির্দিষ্ট ক্ষেত্র অ্যাক্সেস এবং/অথবা সংশোধন করা হলে একটি প্রোগ্রামের সম্পাদন স্থগিত করার জন্য ফিল্ড ওয়াচপয়েন্ট সেট করুন।
ব্যতিক্রম এবং ক্র্যাশ রিপোর্টে উন্নত ডায়গনিস্টিক বিশদ
রানটাইম ব্যতিক্রম ঘটলে ART আপনাকে যতটা সম্ভব প্রসঙ্গ এবং বিস্তারিত দেয়। ART java.lang.ClassCastException
, java.lang.ClassNotFoundException
, এবং java.lang.NullPointerException
এর জন্য বর্ধিত ব্যতিক্রম বিবরণ প্রদান করে। (ডালভিকের পরবর্তী সংস্করণগুলি java.lang.ArrayIndexOutOfBoundsException
এবং java.lang.ArrayStoreException
এর জন্য প্রসারিত ব্যতিক্রম বিবরণ প্রদান করেছে, যেটিতে এখন অ্যারের আকার এবং সীমার বাইরের অফসেট অন্তর্ভুক্ত রয়েছে এবং ARTও এটি করে।)
উদাহরণস্বরূপ, java.lang.NullPointerException
এখন নাল পয়েন্টার দিয়ে অ্যাপটি কী করার চেষ্টা করছে সে সম্পর্কে তথ্য দেখায়, যেমন অ্যাপটি যে ফিল্ডে লেখার চেষ্টা করছে বা যে পদ্ধতিতে কল করার চেষ্টা করছে। এখানে কিছু সাধারণ উদাহরণ রয়েছে:
java.lang.NullPointerException: Attempt to write to field 'int android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object reference
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
এআরটি জাভা এবং নেটিভ স্ট্যাক তথ্য উভয়ই অন্তর্ভুক্ত করে অ্যাপ নেটিভ ক্র্যাশ রিপোর্টে উন্নত প্রসঙ্গ তথ্য প্রদান করে।
সমস্যা রিপোর্ট করুন
আপনি যদি এমন কোনো সমস্যায় পড়েন যা অ্যাপ JNI সমস্যার কারণে না হয়, তাহলে Android Open Source Project Issu Tracker-এর মাধ্যমে রিপোর্ট করুন। একটি adb bugreport
অন্তর্ভুক্ত করুন এবং Google Play স্টোরে অ্যাপের লিঙ্ক যদি উপলব্ধ থাকে। অন্যথায়, সম্ভব হলে, সমস্যাটি পুনরুত্পাদন করে এমন একটি APK সংযুক্ত করুন।