Activity Life Cycle
سلام دوستان
من از Ctrl+Space برای متد های oncreateو on pause و on stopاستفاده میکنم
من میخواهم از متد
OnDestroy استفاده کنم که بعد از بسته شدن برنامه کاری رو انجام بده < اما در Ctrl+space وجود نداره ولی میشه دستی اون رو وارد کرد و برنامه کرش نمیکنه !!!
چون که onStop دقیقا با onpause با هم اجرا میشن معنی نمیده که بعد از بسته شدم کامل برنامه یک TOAST نشون بده و هربار که از اکتیویتی به اکتیویتی دیگری میرم توست رو نمایش میده !!
یعنی برنامه ایی که pause بشه بعد از اون stop میشه پس استفاده از هر دوی اینها یک هست !! نتیجه تجربه ایی من بوده !!
من OnDestroy رو دستی میتونم وارد کنم و اصلا توی Ctrl+Space دیده نمیشه ؟
چرا؟ اینطور هست ؟ البته برای این متد super.Destroy وجود نداره و از Super.stop استفاده میکنه !!
protected void onDestroy() {
super.onStop();
Log.i(G.LOG_TAG, "ِDestroy From First Activity");
Toast.makeText(G.context, "GOOD-BYE", Toast.LENGTH_LONG).show();
}
یه سوال دیگه
من متوجه شدم که چرا ActivityEnhanced نباید توی AndroidManifest تعریف بشه
به این دلیل که ما هیچوقت اون رو باز و اجرا نمیکنیم در واقع هیچ شی یا عنصری برای این کلاس وجود نداره که در اثر وجود هر عنصر مثل باتن و غبره باید یک لایه xml تعریف و اگر قرار باشه اینچنین باشه نیاز میشه که اون رو توی AndroidManifest تعریف کنیم
درواقع این اکتیوتی یک رابط هست بین کلاس ها و Activity که باتوجه به هدفی که برای کلاس ها در نظر داریم میشه اون رو خود اکتیوتی هم نام برد
خب اگر اینطور باشه
برای کلاس G هم ما میتونستیم اون رو توی مانیفست تعریف نکنیم ! چرا کلاس G رو تعریف میکنیم ؟؟ با این که میراث بری بیشتری نسبت به اکتیویتی Enhanced داره
و ما فقط از متد ها موجود درون اون استفاده میکنیم!
همونطور که از activity میشه بجای context استفاده کرد
پس باید بشه از متدهای applicatioh موجود در کلاس G هم بصورت مستقیم استفاده کرد. اما چرا اون رو تعریف میکنم ؟
سعی میکنم ساده توضیح بدم و تو عمق مطلب نرم
ببین application با activity و context سه چیز متفاوتن
شما وقتی میگی فلان کلاس application هست، داری به برنامه میگی هنگام اجرای برنامه، اولین کلاس این کلاسه که اجرا باید بکنی و این کلاس در تمام طول برنامه فعاله. به خاطر همین ما متغییر های مهم مون رو اونجا تعریف میکنیم.
اما وقتی داری یه EnhancedActivity درست میکنی، اون یه کلاس مشتق شده (یه نوع) از Activity هست که داریم مجهزترش میکنیم (مثلا یه onResume توش میذاریم که یه کار خاصی بکنه برامون)
حالا از این به بعد به جای اینکه توی تک تک کلاسهایی که از Activity مشتق شدن، بیایم یه onresume تعریف کنیم (به جای اینکه بعد از تعریف تک تک کلاس ها رو مجهز کنیم) میایم و کلاس ها رو از EnhancedActivity مشتق میکنیم ( که از همون اول مجهزه) .
اما به زبان ساده چه کلاسایی رو باید توی manifest معرفی کنیم؟
1- کلاس application : چون میخوایم بگیم این کلاس باید از همون اول تا آخر باز باشه
2- کلاسهایی که SetContentView دارن
3- Broadcast Receiver ها
4- Service ها
احتمالا فعلا با گزینه های 3 و 4 کاری نداری (توی آموزش ها هم نیست)
اگه هنوز روشن نشده بگو تا واضح تر توضیح بدم :)
دوستان سوالی داشتم که به این بحث مرتبط
ممنون میشم جواب بدین
من می خوام که زمانی که اپلیکشن بسته شد، کاری انجام شود؟
قبلا مثل دوست مون می خواستم در onDestroy کلاس G انجام بدم، جواب نگرفتم بی خیال شدم
اما الان که این تاپیک را دیدم یادم افتا
به نظرتون باید چی کار کنم؟
// if (getClass().getSimpleName().equals("ActivityMain")) {
if (this instanceof ActivityMain) {
Intent intent = new Intent(G.currentactivity, ActivityTwo.class);
G.currentactivity.startActivity(intent);
}
//else if (getClass().getSimpleName().equals("ActivityTwo")) {
else if ( !(this instanceof ActivityMain)) {
Intent intent = new Intent(G.currentactivity, ActivityMain.class);
G.currentactivity.startActivity(intent);
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .