برنامه نویسی اندروید - دانشگاه صنعتی قم

این وبلاگ کانال ارتباطی با دانشجویان درس«برنامه نویسی موبایل» دانشگاه صنعتی قم می باشد.

برنامه نویسی اندروید - دانشگاه صنعتی قم

این وبلاگ کانال ارتباطی با دانشجویان درس«برنامه نویسی موبایل» دانشگاه صنعتی قم می باشد.

محتویات این وبلاگ با هدف آموزش اندروید در دوره درسی "برنامه نویسی موبایل" در دانشگاه صنعتی قم توسط اینجانب گردآوری شده است.
تعداد زیادی از مطالب ترجمه شده در این وبلاگ توسط دانشجویان دانشگاه صنعتی قم به عنوان پروژه های این درس ترجمه شده است.
در صورتی که تصمیم به تماس با من دارید، می توانید از طریق آدرس ایمیل qut دات android در جی میل دات کام با من تماس بگیرید.
-------------------
اگر بتوانم به شما کمکی در زمینه برنامه نویسی اندروید بکنم، خوشحال خواهم شد با این حال اگر پرسشی را ارسال کردید و بنده نیز به دلیل مشکلات و مشغله نتوانستم پاسخگو باشم، پوزش بنده را پیشاپیش پذیرا باشید.
-------------------
چون افراد زیادی از من درخواست می کنند تا برنامه نویسان اندروید به خصوص در شهر قم را به آنها معرفی کنند، اگر تمایل دارید رزومه و یا مشخصات خود را برایم ارسال کنید تا در صورت وجود درخواستهایی از این دست به شما اطلاع دهم.
از نظر من محدویتی به شهر قم وجود ندارد، لذا اگر برنامه نویس اندروید در شهرهایی دیگر هستید و یا به دنبال نیروی برنامه نویس اندروید هستید با من در تماس باشید، شاید بتوانم در این زمینه به شما کمکی بکنم :)
ناگفته نماند از آنجایی که در فضای مجازی من شناختی از هیچ شخص یا شرکتی ندارم، اگر شخصی به دنبال نیروی کار باشد، به افرادی که با مشخصات درخواستی ایشان تطابق داشته باشند، اطلاع خواهم داد و توصیه می شود برنامه نویسان محترم نیز قبل از شروع به همکاری، ملاحظات لازم در این زمینه را به عمل آورند چون من نیز شناختی از طرف مقابل ندارم.

طبقه بندی موضوعی

16- اکتیویتی ها - بخش اول

شنبه, ۳ خرداد ۱۳۹۳، ۱۲:۱۱ ق.ظ
مترجم: داوود احمدی - حسین ربانی
آدرس مطلب اصلی: http://developer.android.com/guide/components/activities.html

Activity  

بخشی از بسته نرم افزاری است که وظیفه نمایش رابط کاربری را به عهده دارد و کاربران می توانند از آن برای تعامل با کاربرد استفاده کنند، مانند صفحه کلید مجازی و شماره گیری، ارسال پست الکترونیکی، مشاهده نقشه. هر activity پنجره ایی در اختیار دارد که می تواند در آن رابط کاربری خود را ترسیم کند. این پنجره معمولاً کل صفحه نمایش را پر می کند، اما ممکن است این پنجره کوچکتر از کل صفخه نمایش باشد و بر روی پنجره های دیگر نیز جابه جا شود.

یک کاربرد، معمولاً از چندین activity تشکیل می شود که وابستگی کمی (loosely bound) به هم دارند. معمولاً یکی از آنها activity اصلی است، که در هنگام شروع کاربرد به عنوان اولین صفحه نمایش داده می شود. هر activity می تواند برای انجام کارهای مختلف دیگر activity های دیگری را نیز فراخوانی کند. نحوه مدیریت activity ها در اندروید به صورت پشته ایی (back stack) است. هر زمان که یک activity جدید شروع می شود، بر بالای پشته قرار می گیرد و به کاربر نمایش داده می شود و activity قبلی متوقف و وضعیت آن در پشته نگهداری می شود. همانطور که می دانید، پشته، صفی است که از مکانیزم "last in, first out"  استفاده می کند، بنابراین هنگامی که کار کاربر با activity در حال اجرا تمام شود و دکمه عقب را انتخاب کند، activity در حال اجرا که در بالای پشته قراردارد از بین می رود و سیستم activityمتوقف شده قبلی را نمایش می دهد.

هنگامی که یک activity به خاطر شروع یک activity دیگر متوقف می شود، activity در حال توقف، با استفاده از متدهای callback که برای این کار در نظر گرفته شده است از تغییر وضعیت خود مطلع شود و می تواند قبل از توقف کامل، وضعیت خود را ذخیره کند. متدهای callback فراوانی وجود دارند که یکactivity می تواند با استفاده از آنها از تغییر وضعیت هایی مانند creating،stopping، resuming وdestroying مطلع شود و قبل از تغییر وضعیت، کار مناسب را انجام دهد. برای مثال، هنگامی که یکactivity متوقف می شود، باید اشیائی که منابع زیادی از سیستم را مصرف کرده اند از بین بروند، مانند ارتباطات شبکه و پایگاه داده. سپس هنگامی که activity دوباره شروع به کار کرد، منابع مورد نیاز را به خود اختصاص دهد. این تغییر وضعیت ها همگی جزئی از activity lifecycle هستند که در ادامه بیشتر شرح داده می شوند.

 

 

 

ایجاد Activity

برای ایجاد یک activity، شما باید یک زیر کلاس از کلاس Activity را ایجاد کنید، سپس در زیرکلاس ایجاد شده، باید متدهای callback ئی که سیستم هنگام تغییر وضعیت ها فراخوانی می کند را پیاده سازی کنید. دو تا از مهمترین متدهای callback عبارتند از:

onCreate()

یکی از مهمترین متدهایی که شما باید آن را پیاده سازی کنید، این متد است. سیستم هنگامی کهactivity شما را ایجاد می کند این متد را فراخوانی می کند. در هنگام پیاده سازی این متد، شما باید بخش های ضروری activity خود را مقداردهی اولیه کنید. این متد جائی است که شما باید متدsetContentView() را فراخوانی کنید تا چیدمان (layout) رابط کاربری activity مشخص شود.

onPause()

هنگامی که کاربر در حال ترک کردن activity شما است سیستم این متد را به عنوان اولین نشانه فراخوانی می کند. این متد جایی است که شما باید وضعیت و تغییراتی را که کاربر ایجاد کرده است را ذخیره کنید (چون ممکن است کاربر به activity شما باز نگردد).

طراحی رابط کاربر

به وسیله سلسه مراتبی از  اشیای  view که از کلاس های view  مشتق شده اند می توان به  activity دسترسی پیدا کردهر   view ،بخش ویژه ای در پنجره activity  را کنترل می کند و به واکنش کاربر پاسخ می دهد .

به طور مثال view ای که شامل یک دکمه  است با لمس کردن یک دکمه توسط کاربر یک فعالیت (کار)نجام می شود اندروید شماری از object  های view  از پیش ساخته شده را آماده کرده است که شما می توانیدبه منظور طراحی و سازماندهی layout هایتان استفاده بکنید .

ابزارک ها view  هایی هستند که یک سری عناصر تعاملی و گرافیکی را برای صفحه نمایش فراهم می کند از قبیل button: text field, checkbox, image

Layout ها view  هایی هستند که از    view group مشتق شده اند و یک layout برای object های از نوع  view محسوب می شود از قبیل linear layout, grid layout, relative layout شما می توانید همچنین یک زیر کلاسی از کلاس viewیا کلاس  view group بسازید تا ابزار ها و layout های خودتان را layout activity  قرار دهیم.

رایج ترین روش برای تعریف یک layout  این است که یک فایل  با پسوند XMLدر پوشه resource بسته نرم افزار یمان ایجاد کنیم .به این ترتیب شما می توانید طرحی را بدون توجه به source کد برای رابط کاربریتان ایجاد کنید که این طرح رفتار activity را توصیف می کند .

شما می توانید layout تان  را به عنوان رابط گرافیکی activity  تان با استفاده از    set content viewتنظیم کنید .این کار با استفاده از کد های آماده انجام می شود (کد هایی که در خود برنامه وجود دارد )

به هر حال این امکان وجود دارد که view  هایی جدید به طور مستقیم توسطactivity  ایجاد شود و  view های تودرتو به وسیله وارد کردن view هایی از پنل view group   ایجا شوند سپس برای نمایش دادن      view group از یک layout  استفاده کنید.

تعریف activity  در manfest

بایدactivity در فایل  mainfest  تعریف شود تا توسط سیستم قابل دسترسی باشد برای تعریف  activity    تان فایل manifest  را باز می کنید  یک activity را  به عنوان فرزندی  از بسته نرم افزار اضافه کنید برای مثال :

 

 

 

چندین ویژگی دیگری وجود دارد که شما می توانید در ان بخش تعریف کنید و تعریف جزییات از قبیل   lableبرای activity     یک آیکون برای  activity    یا یک تم برای رابط گرافیکی activity تان ساخته  می شود .

android:name: :صفت اندروید تنها صفتی است که به یک صفت دیگر وابسته و نیازمند است که نام کلاس مورد فعالیت خودش  را مشخص می کند زمانی که می خواهید   application تان    را مشخص کنید نباید نامش را تغییر دهید به خاطر اینکه اگر این کار را انجام دهید شما عملا دسترسی کاربران به آن را  را از بین می برید مثل:

application shortcuts

استفاده از intent  فیلتر :

یک المان  activity  می تواند چندین intent  فیلتر برای خودش داشته باشد از intent-filter  به منظور مشخص کردن اینکه چگونه اجزای نرم افزاری فعالیت خود را آغاز میکند استفاده می شود .زمانی که با استفاده از ابزار های Android SDK  می خواهید یک  intent filter    جدید بسازید    Activity    اصلی به صورت خودکار که شامل    intent filter است که main  را مشخص می کند این بایددر طبقه بندی  launcher ها قرار بگیرد .

 

Intent filter به این شکل است ...

 

المان action  مشخص می کند که این تابع بالا ورودی main در application است.المان category فعالیتی را که باید در launcher  سیستم application لیست شود مشخص می کند که برای کاربران اجازه اجرای این activity داده شده است.اگر می خواهید که application شما به صورت مستقل ( خود محور) باشد و سایر application ها فعالیت های آن را اجرا کنند پس نباید از هیچ intent filter دیگری استفاده کنید.

Activity فقط باید  "main" action و "launcher" category را داشته باشد ، همانند مثال قبل

Activity هایی که نمی خواهید برای سایر application ها در دسترسی باشد نباید هیچ intent filter داشته باشند و برای شروع آنها برای خودتان می توانید از explicit intents ها استفاده کنید که در ادامه بحث خواهد شد .

با این وجود اگر می خواهید activity شما به سایر intent  های ضمنی که از سایر application های دیگر    فرستاده می شود ، پاسخ داده شود.شما باید یک intent فیلتر اضافی برای activity خود در نظر بگیرید ، برای هر نوع intent  ،که Activity شما می خواهد به آن پاسخ دهد باید intent filter که شامل المان اکشن و یک المان category اختیاری و یا یک المان دیتا دارد شامل باشد.

 

شروع یک activity

با صداکردن تابع start activity می توانید  activity را شروع کنید. داخل این تابع یک intent وجود دارد که نوع فعالیت هایی که می خواهید شروع شود را تشریح می کند . intent  نوع فعالیت هایی را که می خواهد انجام بشود مشخص می کند و یا نوع action که می خواهد به اجرا در بیاید را تشریح می کند ( و سیستم فعالیت متناسب Activity شما را انتخاب می کند که حتی ممکن است برای یک application دیگری باشد) یک intent می تواند در داخل خود مقداری داشته باشد که برای شروع activity مورد نیاز است. وقتی که با application تان کار می کنید اغلب شما یک activity شناخته شده را اجرا می کنید.

با استفاده از class name و ایجاد یک intent صراحتا نوع فعالتی که نمی خواهید آن را شروع کنید تعریف می کند. مثلا نمونه زیرActivity دیگری به نام SignInActivityرا اجرا می کند.

 

با وجود اینکه application تان ممکن است بعضی از عملکرد ها از قبیل فرستادن E-Mail ، Text Massage یا به روز رسانی استفاده از اطلاعات  activity را انجام ندهد در این مورد برنامه تان ممکن است activity هایی را  برای  اجرایAction ها .نداشته باشد تا آن رااجرا بکند.

بنابرین میتوانید به جای کار با activity  های موجود بسته نرم افزاری action  ها را اجرا کنید این همان جایی است که intent  ها دارای مقادیر معتبر هستند شما با ایجاد یک intent عملی را که می خواهید انجام دهید توصیف می کنید.    و Lunch System activity را از Application دیگری آماده می کند.

Activity های مختلف توسط intent ها مدیریت  می شوند و سپس کاربر می تواند آنچه را که استفاده می کند انتخاب کند برای مثال اگر شما می خواهید تا کاربر یک پیام متنی بفرستد شما می توانید intent زیر را ایجاد کنید.

EXTRA_EMAIL  اضافه شده ایمیلی را که به intent فرستاده شود می باشد یک آرایه از نوع رشته از آدرس های ایمیل است که ایمیل مورد انتخاب را می فرستد هنگامی که یک application  به ایمیل intent پاسخ می دهد آرایه از نوع رشته را فراهم کرده و آن را می خواند و در فیلد ارسال فرم قرار می دهد از این طریق activity به شروع به باز کردن می کند و تا هنگامی که کار کاربر انجام نشده activity تان ادامه پیدا می کند .

 

شروع یک activity  برای دستیابی به نتیجه خاص

بعضی مواقع ممکن است شما بخواهید که نتیجه ای را از  activity   که شروع کره اید دریافت کنید در این مواقع activity   را با فراخوانی  startActivityForResult()  به جای  startActivity.موقعی که activity   زیر شاخه انجام می شود .سپس نتیچجه را از activity  دریافت می کندوپیادهسازی می کند متدonActivityResult() callback  زمانی که activity   بعد از آن انجام شد یک نتیجه را به عنوان یک intent به متد  ()onActivityResult  برمی گرداند.

به  عنوان مثال شاید شما بخواهید که کاربر یکی از مخاطبین خود را انتخاب بکند بنابراین activity تان با دسترسی به اطلاعات آن contact کار هر کاری را انجام می دهد در اینجا شما می توانید بفهمید که چگونه یک intent و خروجی آن ساخته می شود

این مثال نشان می دهد پایه منطقی که شما استفاده می کنید در متد onActivityResult   به منظور اینکه خروجی یک activityرا نشان دهید شرط اول چک می کند که آیا درخواست با موفقیت انجام شده است یا نه در صورت مثبت بودن انجام درخواست خروجی کد یک okey به ما نشان می دهد و در صورتی که نتیجه ی خروجی با توجه به در خواست انجام شود در این مورد پاسخ کد این است که پارامتر دوم را با استفاده از startActivityForResult()  می فرستد .در اینجا کد نتیجه activity  را به وسیله واکشی اطلاعات به عنوان یک intent مدیریت می کند  .

بستن یک فعالیت

شما می توانید یک activity  را به وسیله صدا زدن تابع finish ببندید.شما می توانید یک actibvity  را به صورت جداگانه که قبلا آغاز شده است را به وسیله تابع finishActivity() ببندید

مدیریت چرخه حیات activity

۱- Active/running state

این وضعیتی است که Activity  در جلو (front) قرار دارد و focus روی آن قرار دارد یعنی Activity صفحه ای است که در مقابل کاربر آشکار شده و فعال است.

۲- Paused stse

در وضعیت paused یا توقف Activity به صورت جزئیات (partially) برای کاربر آشکار است ولی focus روی آن قرار ندارد و صفحه به صورت فعال نیست.

این وضعیت زمانی اتفاق می افتد که یک Activity دیگر روی این  Activity قرارمی گیرد ولی تمام صفحه را پوشش نمی دهد و یا Activity که روی آن قرار می گیرد دارای شفافیتی (transparancy) است که باعث می شود صفحه زیر آن آشکار باشد. در این وضعیت (Activity (paused به طور کامل در جریان است و وضعیت خود را نگه می دارد ولی زمانی که سیستم دچار کمبود حافظه شود و راه دیگری برای آزاد کردن حافظه نداشته باشد این صفحه را از بین می برد.

۳- Destroyed/Dead state

زمانی به یک Activity مرده یا نابوده شده گفته می شود که دیگر در حافطه وجود نداشته باشد. یک Activity زمانی در این وضعیت است که یا هنوز state نشده و یا یک بار شروع شده و یا در وضعیت stopped یا paused برای آزاد سازی منابع نابود (kill) شده است.

پیاده سازی چرخه callback ها :

وقتی که یک Activity به یک حالت متفاوت دیگر که در بالا به آن اشاره شد انتقال پیدا کند از میان فراخوانی متد های مختلف اطلاع حاصل می شود تمام متدهای Callback مانند دست آویز هایی هستند که برای لغو حالت تغییر یافته مناسب استفاده می شود ساختار Activity زیر شامل تمام حالات متد های ابتدایی Life cycle می باشد.

 


  • وهاب صمدی بخارایی

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی