آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

Activity Life Cycle

Criss  12 سال پیش  12 سال پیش
0 0

سلام دوستان

من از 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();
}

 

0 0
واقعا ببخشید الان به جواب رسیدم اصلا حواسم نبود که درواقع این یک متد هست و اسم متد میتونه تغییر کنه!!!اما چیزی رو که از به عنوان sunclass یعنی همون super.method داره دریافت میکنه مشخص میکنه که خاصیت و عملکرد برنامه چی میتونه باشه درست میگم؟ (12 سال پیش)
0 0
باز هم فکر کنم دارم اشتباه میکنم !! این متد برای کلاس G اصلا وجود نداره درسته ؟ درواقع onDestroy برای یک اکتیویتی وجود داره و برای یک اپلیکیشن وجود نداره؟ (12 سال پیش)
0 0
الان من میخوام onDestroy رو که توی یک اکتیویتی تعریف کردم رو برای کلاس G هم تعریف کنم !! مشکل چیه ؟ انگار وجود نداره !! (12 سال پیش)
0 0
خب خدا رو شکر تونستم از خود اکلیپس کمک بگیرم و وقتی روی متود موس رو نگه میدارم میگه که onpause , on resume , onDestroy برای اپلیکیشن وجود نداره!! (12 سال پیش)
0 0
اولا اینکه هر اسمی نمیتونی بزاری چون شما دارید متد رو از کلاس پدر میگیرید و overrideش می کنید پس باید دقیقا همون اسم باشه ، و برای کلاس اپلیکیشین ، تمام متدهای activity وجود نداره درواقع life cycle کلاس اپلیکیشن با اکتیویتی متفاوت هست و وقتی ctrl+space میزنی هرچی که میبینی همش همونه بیشتر از اون چیزی وجود نداره!! (12 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
Criss  12 سال پیش
0 0

یه سوال دیگه

من متوجه شدم که چرا ActivityEnhanced نباید توی AndroidManifest تعریف بشه

به این دلیل که ما هیچوقت اون رو باز و اجرا نمیکنیم در واقع هیچ شی یا عنصری برای این کلاس وجود نداره که در اثر وجود هر عنصر مثل باتن و غبره باید یک لایه xml تعریف و اگر قرار باشه اینچنین باشه نیاز میشه که اون رو توی AndroidManifest تعریف کنیم

درواقع این اکتیوتی یک رابط هست بین کلاس ها و Activity که باتوجه به هدفی که برای کلاس ها در نظر داریم  میشه اون رو خود اکتیوتی هم نام برد

خب اگر اینطور باشه

برای کلاس G هم ما میتونستیم اون رو توی مانیفست تعریف نکنیم ! چرا کلاس   G رو تعریف میکنیم ؟؟ با این که میراث بری بیشتری نسبت به اکتیویتی Enhanced داره

و ما فقط از متد ها موجود درون اون استفاده میکنیم!

همونطور که از activity میشه بجای context استفاده کرد

پس باید بشه از متدهای applicatioh موجود در کلاس G هم بصورت مستقیم استفاده کرد. اما چرا اون رو تعریف میکنم ؟

0 0
متاسفانه بخش 5-2 یخورده اصطلاحاتی داشت که قبلا نشنیده بودیم و توی یک بخش چندین مورد جدید باهم درس داده شد - ولی یجورایی این مورد رو هم تونستم بفهمم ! (12 سال پیش)
پاسخ به سوال 
sadeghbarout  12 سال پیش
+1 0

سعی میکنم ساده توضیح بدم و تو عمق مطلب نرم

ببین application با activity و context سه چیز متفاوتن

شما وقتی میگی فلان کلاس application هست، داری به برنامه میگی هنگام اجرای برنامه، اولین کلاس این کلاسه که اجرا باید بکنی و این کلاس در تمام طول برنامه فعاله. به خاطر همین ما متغییر های مهم مون رو اونجا تعریف میکنیم.

اما وقتی داری یه EnhancedActivity درست میکنی، اون یه کلاس مشتق شده (یه نوع) از Activity هست که داریم مجهزترش میکنیم (مثلا یه onResume توش میذاریم که یه کار خاصی بکنه برامون)

حالا از این به بعد به جای اینکه توی تک تک کلاسهایی که از Activity مشتق شدن، بیایم یه onresume تعریف کنیم (به جای اینکه  بعد از تعریف تک تک کلاس ها رو مجهز کنیم) میایم و کلاس ها رو از EnhancedActivity مشتق میکنیم ( که از همون اول مجهزه) . 

اما به زبان ساده چه کلاسایی رو باید توی manifest معرفی کنیم؟

1- کلاس application : چون میخوایم بگیم این کلاس باید از همون اول تا آخر باز باشه

2- کلاسهایی که SetContentView دارن

3- Broadcast Receiver ها

4- Service ها 

احتمالا فعلا با گزینه های 3 و 4 کاری نداری (توی آموزش ها هم نیست)

اگه هنوز روشن نشده بگو تا واضح تر توضیح بدم :)

پاسخ به سوال 
مائده  12 سال پیش
0 0

دوستان سوالی داشتم که به این بحث مرتبط

ممنون میشم جواب بدین

من می خوام که زمانی که اپلیکشن بسته شد، کاری انجام شود؟

قبلا مثل دوست مون می خواستم در onDestroy کلاس G انجام بدم، جواب نگرفتم بی خیال شدم

اما الان که این تاپیک را دیدم یادم افتا

به نظرتون باید چی کار کنم؟

0 0
خب توی onDestroy آخرین اکتیویتیت که میخواد بسته بشه بذار (12 سال پیش)
0 0
من تست کردم باید ondestroy رو توی activityenhanced بزاری (12 سال پیش)
0 0
اما اینطوری هر اکتیویتی که بسته بشه اون کار خاص انجام میشه نه وقتی برنامه بسته میشه (12 سال پیش)
0 0
اره اما من یه دستور if فکر کنم گذاشتم که اون کار رو مجزا میکنه (12 سال پیش)
0 0
سلام اندروید اطمینان داده که با متد onpause دیگه اکتیویتی تمومه اما ممکنه متد های ondestroy و onstop اجرا نشوند . بنابراین به نظر من بهترین جا متد onpause هست. (12 سال پیش)
پاسخ به سوال 
Criss  12 سال پیش
0 0

// 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);
}

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .