آشنایی کامل با چرخه حیات activity
با نام و یاد خدا
در جلسه قبل درباره اهمیت activity ها صحبت کردیم. activity ها بخش اساسی ایجاد یک اپلیکیشن اندروید را برعهده دارند و تسلط کامل بر آن درک رفتار گوشی هوشمند با نرم افزار را برای ما آسان می کند. بنابراین حتما قبل از به کارگیری activity ها در برنامه نویسی باید با مبحث مهم چرخه حیات activity ها آشنا شویم.
در چرخه حیات activity ما متوجه می شویم که اکتیویتی در چه موقعیتی است و چگونه و چطور رفتار می کند.
()OnCreate : این متد زمانی فراخوانی می شود که activity برای اولین بار ساخته می شود.
()OnStart : این متد زمانی فراخوانی می شود که activity برای کاربر به نمایش در بیاید.
()OnResume : این متد زمانی فراخوانی می شود که activity آماده تعامل با کاربر باشد.
()OnPause: این متد زمانی فراخوانی می شود که activity به صورت موقت نگه داشته می شود تا activity دیگری شروع به کار کند. اگر کاربر دوباره به همین activity برگردد، ()OnResume فراخوانی می شود.
()OnStop: این متد زمانی فراخوانی می شود که دیگر activity به کاربر نمایش داده نمی شود. با متد ()OnRestart هم می توان مجدد آن activity را فراخوانی کرد.
()OnDestroy:این متد زمانی فراخوانی می شود که activity به طور کامل از بین می رود.
()OnRestart: این متد زمانی فراخوانی می شود که activity بعد از Stop شدن مجدد ریستارت شود.
چرخه حیات activity در برنامه نویسی
برای اینکه چرخه حیات Activity را بیشتر درک کنیم سراغ برنامه نویسی می رویم تا در اجرای برنامه عملکرد متدهایی که گفتیم را ببینیم. بنابراین نیاز است که در برنامه log تعریف کنیم. وقتی پروژه را run می کنیم، هزاران فعالیت در جاوا در حال انجام می باشد و ما فقط می خواهیم فعالیت هایی که مد نظر ماست را نمایش دهد بنابراین نیاز به تعریف log می باشد.
تعریف تمام متدها در برنامه
برنامه ای که در جلسه قبل ایجاد کردیم را باز می کنیم. (می توانید یک برنامه جدید ایجاد کنید). فایل Activity خود را دوبار کلیک کنید تا پنجره آن باز شود.
همانطور که می بیند متد ()OnCreate به صورت پیش فرض تعریف شده است. در جلسه قبل گفتیم که یک subclass به نام OnCreate داریم که از superclass خود به نام AppCompatActivity اکستند می شود. و متد OnCreate را از پدرش به ارث می برد بنابراین نیاز به کدنویسی ندارد.
متد های دیگر چرخه حیات (یعنی: OnStart ، OnResume، OnPause، OnStop، OnDestroy ) را هم تعریف می کنیم.
برای اضافه کردن متد های بالا دو روش داریم :
- نام متد را تایپ کنیم ،می بینیم که خود جاوا لیستی از متدها را به ما پیشنهاد می دهد، متد مدنظر خود را انتخاب می کنیم تا برای ما ایجاد کند.
با انتخاب متد از لیست پیشنهادی، متد ()OnStart به صورت زیر ظاهر می شود.
- روش دوم اینکه روی صفحه راست کلیک کنید و گزینه …Generate را انتخاب کنید. در پنجره ظاهر شده override Method را انتخاب کنید سپس یک پنجره ظاهر می شود که لیست تمام متدهای Supercalss که گوگل ایجاد کرده است را نمایش می دهد. شما می توانید متدی که لازم دارید را انتخاب کنید. (در تصویر زیر این روند را مرحله به مرحله می بینید)
بقیه متد ها را هم با یکی از دو روش بالا ایجاد کنید.
ایجاد log در برنامه
خب حالا نوبت به این رسیده که log ایجاد کنیم تا عملکرد هر کدام از این توابع را ببینیم.
- ابتدا کتابخانه log را import می کنیم:
import android.util.Log;
سپس یک متغیر به نام mylog از نوع String تعریف می کنم و به آن مقدار دلخواه می دهم.
private final String مقدار متغیر”=نام متغیر”;
حالا باید در هر کدام از توابع این log را قرار دهیم و بگوییم اکتیویتی در هر فازی که هست اعلان کند. خب برای این کار کد زیر را به هر متد اضافه می کنیم:
Log.i (پیغام” ، نام متغیر لاگ”);
وقتی Log(با L بزرگ) را تایپ می کنید و یک دات قرار می دهید، توابع مختلفی به شما نشان می دهد. تابع i را که شامل دو پارامتر string Tag و string msg است را انتخاب می کنیم.( در هنگام اجرا عملکرد آن را خواهید دید.)
به جای tag نام متغیر log را می گذاریم و به جای msg پیغامی که می خواهیم چاپ کند. مثلا ما در تابع OnCreate می خواهیم log ایجاد کنیم باید به صورت زیر بنویسیم:
Log.i(mylog,”oncreate”);
اجرای برنامه
بعد از اینکه برای همه توابع ایجاد کردیم، برنامه را اجرا می کنیم .چون ما می خواهیم با Genymotion اجرا کنیم ، بنابراین باید اول Genymotion که در جلسه پنچم نصب کردیم را اجرا کنیم و سپس دیوایسی که به آن اضافه کردیم را با زدن دکمه Start اجرا می کنیم.
حالا در اندروید استودیو روی دکمه سبز موجود در نوار بالا کلیک می کنیم تا پنجره ای شامل تمام دیوایس های موجود نمایش داده شود.
برنامه اجرا می شود و روی دیوایس ما ظاهر می شود. تب Logcat را بزنید تا log هایی که نمایش می دهد را ببینید.
همانطور که می بینید و قبلا گفتیم هزاران لاگ که ما از آنها سر درنمیارویم را نمایش می دهد پس باید لاگ هایی که می خواهیم را فیلتر کنیم.
برای اینکه فقط لاگ هایی که ما تعیین کردیم نمایش دهد ، سمت راست پنجره logcat یک منو کشویی وجود دارد که به صورت پیش فرض روی show only selected application تنظیم شده است که تمام لاگ ها را نمایش می دهد.
منو را باز کنید و گزینه Edit Filter را انتخاب کنید. در پنجره باز شده log خود را تعریف کنید.(تصویر زیر کاملا گویاست)
مجدد برنامه را اجرا کنید می بینید که فقط لاگ هایی که شما می خواهید فیلتر شده اند و نمایش داده می شوند.
همانطور که می بینید وقتی برنامه را اجرا می کنیم(در حالی که فیلتر روی mylog تنظیم شده است) سه متد اول یعنی OnCreate ، OnStart ، OnResume خیلی سریع اجرا می شوند.
چون برنامه ما خیلی ساده است، دکمه یا اکتیویتی دیگری ندارد که اجرا کنیم و شما عملکرد متدها را ببینید؛ بنابراین دکمه Recent app را می زنیم. با زدن این دکمه ابتدا متد OnPause و سپس متد OnStop اجرا می شوند.
دلیل اینکه خیلی سریع به متد OnStop می رود، این است که ما ازبرنامه خارج شدیم . اگر داخل برنامه دکمه ای بود که باعث می شد به اکتیویتی دیگری برویم ، متد OnStop اینقدر سریع رخ نمیداد.
اگر مجدد وارد برنامه شویم onRestart اجرا میشود ولی اگر آن را ببندیم onDestroy اجرا می شود.
امیدواریم مبحث جالب و مهم چرخه حیات activity را یاد گرفته باشید و در ادامه کار با این موضوع مشکلی نداشته باشید. در جلسه بعد به ساخت فرم لاگین در اندروید استودیو می پردازیم. با ما همراه باشید.
شما می توانید نظرات و سوالات خود را در قسمت دیدگاه ها با ما در میان بگذارید.
سلام
وقتی که دیوایس های مختلف رو توی جنی موشن دانلود میکنم وسطاش خطا میده که: unable to create virtual device. the file is corrupt.
چکار باید بکنم تا درست شه؟
ممنون
سلام و عرض ادب.
احتمالا در دانلود توسط فیلترشکن اینترنت شما قطع و وصل شده و فایل دانلود شده آسیب دیده. در بازه زمانی مختلف امتحان کنید و یا از فیلترشکن دیگری استفاده کنید به احتمال زیاد حل شود.
البته گزینه VT-x در بایوس سیستم هم باید فعال باشد.
با تشکر از همراهی شما
با آپدیت کردن این نرم افزار توسط لینک خودش مشکل قابل حل شد. فقط اگه ممکنه لطفا شما بفرمایید که چرا مثلث در اندروید استادیو من سبز نمیشه؟
پیوست:آرزوی قبولی طاعات
سلام و عرض ادب.
سبز نشدن می تواند نشانه وجود هشدار در حین ساخت فایل اجرایی باشد که باید به دقت به Logها نگاه کنید و خودش راهنمایی میکنه که مشکل از کجاست.
ضمنا شما با پشتکاری که دارید مشکل رو برطرف میکنید و خوشحالم که نحوه رفع مشکل را برای ما هم توضیح می دهید تا ما و تمام دوستانی که پست ها را مطالعه می کنند استفاده ببرند. امیدوارم این فرهنگ آموزش واقعی در همه ما شکل بگیرد.
با تشکر از همراهی شما دوست عزیز
با عرض سلام و خداقوت
در log خطای build gradle مرا توضیح نمیدهد. قسمت vt-x را هم پیدا نکردم که فعال نمایم. در ضمن cpu لپ تاپ بنده دوهسته ای ست؟ این موضوع مشکل ساز نیست؟
سلام و عرض ادب.
اگر نرم افزار مجازی سازی شما اجرا می شود پس نیازی به پیدا کردن گزینه VT-X در بایوس ندارید (نکته ممکنه به نام های مشابه مثل Virtualization Technology باشه). در مورد نشان ندادن log باید به صورت ریموت نگاه کنیم که لطفا در صورت تمایل با شرکت هماهنگ کنید که نگاه کنیم. در مورد CPU هم اگر شما حداقل مشخصات مورد نیاز برای برنامه اندروید استدیو رو رعایت کردید مشکلی پیش نمیاد.
با تشکر از همراهی شما
سلام خسته نباشید
برای من متد ها وجود نداره هم با روش اول که گفته بودید تایپ کردم نیومد و هم با روش دوم چیزی پیدا نکردم میشه راهنمایی کنید
سلام و عرض ادب.
احتمال دارد که شما در ایجاد پروژه جدید نوع آن را درست انتخاب نکرده باشید.
چه نوعی رو انتخاب بکنم پس؟
سلام و عرض ادب
آموزش ها به صورت پیوسته در سایت قرار گرفته است اگر تمام پست های قبلی را قدم به قدم اجرا کرده اید نباید مشکلی داشته باشید. در غیر این صورت اگر همچنان مشکل باقی است لطفا در ساعت اداری با شرکت تماس گرفته تا مشکل شما به صورت ریموت بررسی گردد.
با تشکر از همراهی شما
دوستانی که دیوایس خودشون رو بعد از اجرا gennymotion نمبینن. مشکل من از طریق زیر حل شد:
۱ ورود به صفحه اصلی جنی موشن
۲ انتخاب قسمت تنظیمات
۳ از قسمت ADB گزینه Use Custom Android SDK Tools رو انتخاب و محل SDK که در هنگام نصب به Android Studio داده بودین رو وارد کنید.
۴ دوباره دستگاه مجازی خودتون رو ران کنید.
۵ در اندروید استودیو روی ران کلیک کنید.
راه حل های بیشتر :
https://stackoverflow.com/questions/36142055/genymotion-device-doesnt-appear-on-device-chooser-android-studio
سلام و عرض ادب
از اینکه تجربیات خود را در حل یک مسئله در اختیار سایر کاربران قرار می دهید،بسیار خرسندیم.
با تشکر از همراهی شما
یا سلام و تشکر از آموزش خوب و به روز شما
شماره ی حساب بانکی (کارت) قرار بدهید روی سایت تا هر کس دلش خواست هر مقداری پول بدهد پرداخت نماید
می توانید روی آن بنویسید پرداخت هزینه ی دلخواه و یا هر چیز دیگری که می دانید
سلام و عرض ادب. شما می توانید در منوهای بالای سایت اقدام به خرید عضویت ویژه و استفاده از تمام مقالات روی سایت باشید. البته درآمد عضویت ویژه برای ادامه حیات این سایت ضروری بوده است.
با تشکر از همراهی شما
:app:compileDebugRenderscript
:app:compileDebugAidl
اینا یعنی چی؟؟؟
۰۴-۰۷ ۱۲:۵۹:۲۹٫۴۷۲ ۱۲۳۲-۱۲۳۲/com.android.launcher E/EGL_emulation: tid 1232: eglSurfaceAttrib(1210): error 0x3009 (EGL_BAD_MATCH)
این ارور چیه؟؟
پنجره اپلیکیشن تو صفحه نمیاد
چیکار باید بکنم؟؟
E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1
سلام موقع اجرا دکمه سبز استارت مال من این ارور میده
سلام و عرض ادب. تمام کدها قبلاً تست شده و سپس بر روی سایت قرار گرفته اند. لطفا در هنگام و تست به تمام موارد دقت نمایید از جمله به هماهنگ بودن پروژه با ماشین مجازی که ساخته اید و …
با تشکر از همراهی شما
من تمام مراحلی که از جلسه اول گفتین انجام دادم
ولی متاسفانه ارور میده
از مهندسین کسی میتونه ارور برنمه منو حل کنه
سلام عذر میخوام چرخه حیات اکتیویتی دقیقا به چه درد میخوره جز اینکه زودتر یا دیرتر متد onCreat() اجرا میشه؟؟
مهندس سلام خسته نباشید
من تمام متدها را نوشتم و خطاها را هم رفع کردم ولی دکمه اجرا را می زنم شبیه ساز میاد بالا ولی برنامه اجرا نمیشه پایین اندرید استودیو این خطا را نشان میده .One or more issues found when checking AAR metadata values:
سلام
مهندس لطف می کنید پاسخ بنده را بدید . این خطا برای چیه اشکال از کجاست ؟
سلام با تشکر از مهنس نیکخواه و همه همکاران ایشان که برای آموزش زحمت می کشند .
مشکل خطا برای بنده الحمدلله حل شد . چند بار مطالب را بدقت خواندم و پروژه را چند بار حذف کردم و دوباره از اول طبق راهنمایی سایت شما ساختم . دقیقا نمی دانم مشکل یا از دیوایس ap بود یا از فیلتر شکن .البته دفعات قبل از فیلتر شکن استفاده نمی کردم چون پروکسی را به برنامه معرفی کرده بودم . اما این دفعه هم از فیلتر استفاده کردم هم AP دوایس را تغییر دادم که مشکل برطرف شد .
سلام و عرض ادب
از رضایت شما خرسندیم.با تشکر از همراهی شما
سلام، من دو تا اکتیویتی دارم
۱ و ۲
از یک با یه دکمه به اکتیویتی ۲ میرم و از ۲ با یه دکمه به اکتیویتی ۱
میخوام زمانی که داخل اکتیویتی ۲ یا ۱ هستم و دکمه مالتی تسکینگ گوشی زدم و دوباره به برنامه برگشتم یه پیام نشون بده بگه برگشتی ، حالا با تمام از موارد چرخه حیات تست کردم با on restart میشه انجام داد ولی مشکل اینجاس از اکتیویتی ۲ که با دکمه برگشت میرم به اکتیویتی ۱ باز هم اون پیام نشون داده میشه، راه حلی دارین؟