আমি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্রকল্প তৈরি করেছি এবং মেইনএকটিভিটি.জভাতে> onCreate()
এটি কল করছে super.onCreate(savedInstanceState)
।
শিক্ষানবিস হিসাবে, কেউ কি ব্যাখ্যা করতে পারবেন উপরের লাইনের উদ্দেশ্য কী?
উত্তর:
আপনার করা প্রতিটি ক্রিয়াকলাপটি পদ্ধতি কলগুলির ক্রম দিয়ে শুরু করা হয়। onCreate()
এই কলগুলির মধ্যে প্রথমটি।
আপনার প্রতিটি ক্রিয়াকলাপ android.app.Activity
সরাসরি বা অন্য সাবক্লাসের সাবক্লাসিংয়ের মাধ্যমে প্রসারিত Activity
।
জাভাতে, আপনি যখন কোনও শ্রেণি থেকে উত্তরাধিকারী হন, আপনি সেগুলিতে নিজের কোড চালানোর জন্য এর পদ্ধতিগুলি ওভাররাইড করতে পারেন। এর খুব সাধারণ উদাহরণ হ'ল toString()
প্রসারিত করার সময় পদ্ধতির ওভাররাইডিং java.lang.Object
।
যখন আমরা কোনও পদ্ধতিকে ওভাররাইড করি তখন আমাদের কাছে আমাদের ক্লাসে পদ্ধতিটি পুরোপুরি প্রতিস্থাপনের বা বিদ্যমান প্যারেন্ট ক্লাসের পদ্ধতিটি বাড়ানোর বিকল্প থাকে। কল করে super.onCreate(savedInstanceState);
আপনি ডালভিক ভিএমকে অভিভাবক শ্রেণীর অনক্রিট () এর বিদ্যমান কোড ছাড়াও আপনার কোড চালানোর জন্য বলুন । আপনি যদি এই লাইনটি ছেড়ে দেন তবে কেবল আপনার কোডটি চালানো হবে। বিদ্যমান কোড সম্পূর্ণ উপেক্ষা করা হয়।
তবে আপনাকে অবশ্যই এই পদ্ধতিটিতে আপনার এই সুপার কলটি অন্তর্ভুক্ত করতে হবে, কারণ আপনি যদি তা না করেন তবে onCreate()
কোডটি Activity
কখনই চালিত হয় না এবং আপনার অ্যাপ্লিকেশনটি ক্রিয়াকলাপের জন্য কোনও বিষয়বস্তু বরাদ্দ না দেওয়ার মতো সমস্যায় পড়বে (যদিও আপনি আঘাত করবেন একটি SuperNotCalledException
আপনি আগে আপনি কোন প্রেক্ষাপটে আছে জিনিসটা) একটি সুযোগ আছে।
সংক্ষেপে, অ্যান্ড্রয়েডের নিজস্ব ক্লাসগুলি অবিশ্বাস্যভাবে জটিল হতে পারে। ফ্রেমওয়ার্ক ক্লাসগুলির কোডটি ইউআই অঙ্কন, ঘর পরিষ্কার এবং ক্রিয়াকলাপ এবং অ্যাপ্লিকেশন লাইফসাইকেলগুলি বজায় রাখার মতো স্টাফ পরিচালনা করে। super
কলগুলি বিকাশকারীদের এই জটিল কোডটি পর্দার আড়ালে চালানোর অনুমতি দেয়, যদিও আমাদের নিজস্ব অ্যাপ্লিকেশনের জন্য এখনও বিমূর্ততার একটি ভাল স্তর সরবরাহ করে।
* উত্পন্ন শ্রেণি onCreate(bundle)
পদ্ধতিতে এই পদ্ধতির সুপারক্লাস বাস্তবায়ন কল করতে হবে। " সুপার " কীওয়ার্ডটি ব্যবহার না করা হলে এটি একটি ব্যতিক্রম সুপারনটক্ল্যাড এক্সসেপশন ফেলে দেবে ।
উত্তরাধিকারের জন্য Java
, সুপারক্লাস পদ্ধতিটি ওভাররাইড করতে এবং উপরের শ্রেণি পদ্ধতিটি কার্যকর করতে, super.methodname()
ওভাররাইডিং উত্পন্ন শ্রেণি পদ্ধতিতে ব্যবহার করুন;
অ্যান্ড্রয়েড ক্লাস একইভাবে কাজ করে। Activity
ক্লাসটি প্রসারিত করে যার onCreate(Bundle bundle)
পদ্ধতিতে অর্থবহ কোড লেখা রয়েছে এবং সংজ্ঞায়িত ক্রিয়াকলাপে সেই কোডটি কার্যকর করতে, অনক্রিট () পছন্দ মতো পদ্ধতির সাথে সুপার কীওয়ার্ডটি ব্যবহার করুন super.onCreate(bundle)
।
এটি ক্রিয়াকলাপ শ্রেণীর onCreate()
পদ্ধতিতে লিখিত কোড এবং অ্যান্ড্রয়েড ডেভ টিম পরে এই পদ্ধতিতে আরও কিছু অর্থপূর্ণ কোড যুক্ত করতে পারে। সুতরাং, সংযোজনগুলি প্রতিফলিত করার জন্য, আপনার ক্লাসে আপনাকে সুপার.অনক্রিট () কল করার কথা রয়েছে Activity
।
protected void onCreate(Bundle savedInstanceState) {
mVisibleFromClient = mWindow.getWindowStyle().getBoolean(
com.android.internal.R.styleable.Window_windowNoDisplay, true);
mCalled = true;
}
boolean mVisibleFromClient = true;
/**
* Controls whether this activity main window is visible. This is intended
* only for the special case of an activity that is not going to show a
* UI itself, but can't just finish prior to onResume() because it needs
* to wait for a service binding or such. Setting this to false prevents the UI from being shown during that time.
*
* <p>The default value for this is taken from the
* {@link android.R.attr#windowNoDisplay} attribute of the activity's theme.
*/
এটি পরিবর্তনশীলও বজায় রাখে mCalled
যার অর্থ আপনি super.onCreate(savedBundleInstance)
আপনার ক্রিয়াকলাপটিকে কল করেছেন।
final void performStart() {
mCalled = false;
mInstrumentation.callActivityOnStart(this);
if (!mCalled) {
throw new SuperNotCalledException(
"Activity " + mComponent.toShortString() +
" did not call through to super.onStart()");
}
}
উত্স কোড এখানে দেখুন।
কারণ সুপার.অনক্রিয়েট () এর পরে এটি সেভিডইনস্ট্যান্সস্টেট লোড করার জন্য ক্রিয়াকলাপে (কোনও ক্রিয়াকলাপের পিতাম শ্রেণি) শ্রেণিতে পৌঁছে যাবে এবং আমরা সাধারনত কোনও সংরক্ষিত পরিস্থিতি স্থিতি সেট করি না, তবে অ্যান্ড্রয়েড কাঠামোটি এমনভাবে তৈরি করেছে যাতে আমাদের কল করা উচিত যে।
super.onCreate(savedInstanceState)
, যদি না এতে আপনার মধ্যে অন্য কোনও ত্রুটি থাকে
এটি এমন তথ্য যা আপনি অনক্রিট () এর মাধ্যমে আপনার অ্যাপ্লিকেশনটিতে ফিরে যেতে চান, যদি ক্রিয়াকলাপ ধ্বংস এবং পুনরায় আরম্ভ হয় কিছু অন্তর্নিহিত কারণে (যেমন, ব্যবহারকারী ব্যাকটি বোতাম টিপে না বলে)। OnSaveInstanceState () এর সর্বাধিক সাধারণ ব্যবহার হ'ল পর্দার ঘূর্ণন পরিচালনা করা, ডিফল্ট হিসাবে, ক্রিয়াকলাপগুলি ধ্বংস হয় এবং পুনরায় তৈরি করা হয় যখন ব্যবহারকারী G1 কীবোর্ড স্লাইড করে।
সুপার.অনক্রিয়েট (সেভড ইনস্ট্যান্সস্টেট) বলার কারণ হ'ল আপনার কোড অন্যথায় সংকলন করবে না। ;-)