PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مبانی برنامه نویسی اندروید



ColoMax
October 26th, 2015, 11:36
برنامه های اندروید (Android applications) به زبان جاوا نوشته میشوند. SDK ی اندروید کدها را کامپایل میکند – به همراه تمامی دیتاها و منابع دیگر (مانند تصاویر) – و در داخل پکیج اندروید و با پسوند apk. ذخیره مینماید. تمامی کدهای موجود در یک apk. مربوط به یک برنامه (application) تلقی میشوند و سیستم عامل اندروید این فایل را به عنوان یک فایل اجرایی در نظر میگیرد.

با نصب هر برنامه بر روی یک دستگاه اندرویدی یک پکیج امنیتی مخصوص به خود آن برنامه به آن تعلق میگیرد.

۱) سیستم عامل اندروید سیستمی مبنتی بر لینوکس با قابلیت پشتیبانی از چندکاربر است، بدین صورت که هر برنامه به معنی یک کاربر در نظر گرفته میشود.

۲) بصورت پیش فرض، سیستم به هر برنامه ای یک کد احراز هویت (Linux user ID) مخصوص به خودش را میدهد (این کد فقط برای سیستم قابل شناسایی است و برای برنامه شناخته شده نیست). سیستم برای تمام فایلهای برنامه مجوز صادر میکند، این کار باعث میشود تا تنها برنامه با آن کد هویتی خودش به فایلها دسترسی داشته باشد.

۳) هر پردازشی بر روی ماشین مجازی خودش (virtual machine) اجرا میشود. بنابراین، اجرای کدهای یک برنامه از برنامه دیگر در شرایط مجزا (isolation) انجام میشود.

۴) بصورت پیش فرض، اجرای هر برنامهای بر روی پردازش لینوکسی مربوط به خودش انجام میشود. اندروید، پردازش را زمانی اجرا میکند که کامپوننت نیاز به اجرا شدن داشته باشد (در ادامه به توضیح کامپوننت ها خواهیم پرداخت، نگران نباشید!)، پردازش را زمانی متوقف میکند (shuts down) که دیگر به آن نیازی نباشد یا زمانیکه سایر برنامه ها برای اجرا به حافظه بیشتر نیاز داشته باشند.

بدین روش، سیستم اندروید اصل حداقل امتیاز (principle of least privilege) را اجرا میکند. بر اساس این اصل، هر برنامه ای، بصورت پیش فرض، تنها به کامپوننت هایی دسترسی خواهد داشت که برای اجرا به آنها نیاز داشته باشد و نه بیشتر. این روش محیطی بسیار امن خواهد ساخت، بدین ترتیب که یک برنامه تا زمانیکه مجوزهای لازم را نداشته باشد، نمیتواند به منابع سیستم دسترسی داشته باشد.

اما، راه هایی وجود دارد که یک برنامه بتواند دیتاهای خود را با دیگر برنامه ها به اشتراک بگذارد و یا به سرویس هایی که سیستم میدهد، دسترسی داشته باشد:

۱) این قابلیت برای دو برنامه وجود دارد که بتوانند از یک کد هویتی (Linux user ID) مشترک استفاده کنند. بدین ترتیب هرکدام میتوانند از فایلهای دیگری استفاده نمایند. برای حفظ منایع سیستم، برنامه هایی که از یک کد هویتی استفاده میکنند میتوانند از یک ماشین مجازی استفاده کنند و بترتیب بر روی پردازشهای لینوکسی اجرا شوند (برنامه ها نیاز به sign شدن با یک گواهینامه (certificate) دارند).

۲) هر برنامه میتواند درخواست مجوز برای دسترسی به دیتای دستگاه (device) مانند کانتکت های کاربر (user’s contacts)، پیامهای SMS، حافظه جانبی (SD card)، دوربین، بلوتوث و غیره را داشته باشد. تمامی این مجوزها در زمان نصب برنامه از کاربر مورد سئوال قرار خواهد گرفت.

مطالب فوق توضیح مختصری در مورد چگونگی وجود و عملکرد یک برنامه در سیستم اندروید بود. سایر مواردی که در این مقاله توضیح داده خواهند شد، عبارتند از:

۱) چارچوب و ساختار کامپوننت ها که برنامه شما را می سازند.

۲) فایل مانیفست (manifest) که در آن کامپوننت ها تعریف میشوند و درخواست استفاده از دیتاهای دستگاه داده میشود.

۳) منابعی که از کدهای برنامه جدا هستند و اجازه میدهند که کدهای برنامه شما با درصد بالایی بهینه سازی شوند.



کامپوننت های برنامه (Application Components)

کامپوننت های برنامه، ضروری ترین بلوک های ساختمانی (building blocks) در ساخت برنامه های کاربردی می باشند. هر کامپوننت دارای خصوصیاتی است که از آن طریق میتوانید درخواست های خود را به سیستم اعلام کنید. ضرورتاً همه کامپوننت ها دریافت کننده دستورات کاربر نیستند و بعضی مواقع وابسته به یکدیگرند، اما هرکدامشان نقش مستقل خود را ایفا میکنند. از آنجا که کامپوننت ها مستقل از یکدیگر هستند، با استفاده از آنها قادریم رفتار کلی برنامه را مشخص کنیم.

چهار نوع مختلف از کامپوننت ها وجود دارد. هر نوع در خدمت یک هدف مشخص است و چرخه حیات (lifecycle) مخصوص به خودش را دارد که معلوم میکند کامپوننت چگونه ایجاد میشود و چگونه از بین میرود.

در اینجا به معرفی چهار نوع کامپوننتها می پردازیم.

اکتیویتی ها (Activities): اکتیویتی بیانگر یک اسکرین کامل (صفحه نمایشگر) به همراه یک واسط کاربری است. بعنوان مثال، یک برنامه چک کردن ایمیل را درنظر بگیرید. در این برنامه ممکن است یک اکتیویتی برای نشان دادن لیست ایمیل های جدید داشته باشید، یک اکتیویتی دیگر برای نوشتن و ارسال ایمل داشته باشید و یک اکتیویتی دیگر برای خواندن ایمیل داشته باشید که هرکدام مستقل از دیگری کار میکنند. بدین ترتیب، یک برنامه مجزا میتواند با هرکدام از این اکتیویتی ها ارتباط برقرار کند (اگر برنامه ایمیل اجازه اینکار را بدهد). بعنوان مثال، یک برنامه عکس برداری میتواند اکتیویتی ارسال ایمیل از برنامه ایمیل فوق را بمنظور ارسال عکس گرفته شده، اجرا نماید.

هر اکتیویتی یک زیرکلاس از کلاس Activity است که در مورد این کلاس مفصل در فصل مربوط به خودش توضیح داده خواهد شد.

سرویس ها (Services): یک سرویس کامپوننتی است که در پس زمینه (background) اجرا میشود تا یک کاری را برای مدت طولانی انجام دهد یا کاری را برای یک فرایند از راه دور (remote processes) انجام دهد. سرویس مانند اکتیویتی واسط گرافیکی ندارد. بعنوان مثال، یک سرویس میتواند موزیکی را در پس زمینه اجرا نماید درحالیکه کاربر مشغول کار با برنامه دیگری است یا مثلاً سرویس مشغول ارسال دریافت دیتا در شبکه است درحالیکه کاربر مشغول انجام کار دیگریست. کامپوننت دیگری، مانند اکتیویتی، میتواند یک سرویس را اجرا کند تا با آن در تعامل باشد.

هر سرویس یک زیرکلاس از کلاس Service است که در مورد این کلاس مفصل در فصل مربوط به خودش توضیح داده خواهد شد.

تامین کنندگان محتوا (Content providers): یک تامین کننده محتوا به مدریت دیتای به اشتراک گذاشته شده در برنامه می پردازد. دیتا میتواند به روش های مختلف ذخیره شود. مثلاً در فایل، در دیتابیس SQLite، در وب، یا هر فضای موجود که برنامه توان دسترسی به آنرا داشته باشد. از طریق تامین کننده محتوا، سایر برنامه ها میتوانند به جستجو و تغییر دیتای موجود بپردازند (اگر تامین کننده محتوا اجازه دهد). بعنوان مثال، در سیتم اندروید تامین کننده محتوایی قرار گرفته است که به مدریت اطلاعات تماس کاربر می پردازد. بنابراین، هر برنامه ای با مجوز مناسب میتواند به اطلاعات تماس دسترسی پیدا کند و در آن به جستجو بپردازد.

همچنین تامین کنندگان محتوا برای خواندن از فایل و نوشتن در فایل (reading and writing data) مناسب اند که ممکن است این فایل برای برنامه شما خصوصی باشد و قرار نباشد به اشتراک گذاشته شود. به عنوان مثال، برنامه نمونه Notepad از تامین کننده محتوا به منظور ذخیره سازی فایل استفاده میکند.

تامین کننده محتوا زیرکلاسی از کلاس ContentProvider است و میبایست مجموعه ای از API ها را بمنظور انجام ترنزاکشن ها اجرا کند.

دریافت کننده های اعلانات (Broadcast receivers): یک دریافت کننده کامپوننتی است که به پخش اعلانات همگانی سیستم (system-wide broadcast announcements) جواب میدهد. اصالت بسیاری از اعلانات به سیستم بر میگردد. بعنوان مثال، یک اعلان اعلام میکند که صفحه نمایش خاموش است، باتری کم است یا عکس گرفته شد. همچنین برنامه ها قابلیت راه اندازی (initiate) اعلانات را دارند. بعنوان مثال، اجازه دهند تا برنامه های دیگر بدانند که فرضاً دیتا در موبایل دانلود شده است و برای آنها قابل استفاده است. اگرچه دریافت کننده های اعلانات واسط گرافیکی ندارند، میتوانند نوار وضعیتی برای خود داشته باشند تا کاربر را زمانیکه اتفاقی رخ داد، باخبر کنند. معمولاً، دریافت کننده اعلانات مانند یک دروازه (gateway) برای سایر برنامه ها است و برای انجام کارهای بسیار کوچک در نظر گرفته میشود. بعنوان نمونه، ممکن است سرویسی را راه اندازی نماید تا بسته به اتفاقی کاری را انجام دهد.

یک دریافت کننده اعلانات بعنوان زیر کلاسی از کلاس BroadcastReceiver است و هر اعلان بصورت یک شیء (Intent object) تحویل داده میشود. در مورد دریافت کننده های اعلانات نیز در فصل های بعد صحبت خواهیم کرد.


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

وقتی سیستم کامپوننتی را اجرا میکند، خط پردازش برنامه آغاز میشود (اگر تا حالا اجرا نشده باشد) و کلاسهای مورد نیاز برای اجرای برنامه فراخوانی میشوند. بعنوان مثال، اگر برنامه شما اکتیویتی برنامه دوربین را اجرا نماید تا عکس بگیرد، اکتیویتی در خط پردازشی قرار میگیرد که متعلق به برنامه عکسبرداری است، نه در خط پردازش برنامه شما. بنابراین، برخلاف انجام پردازش ها در سایر سیستمهای دیگر، برنامه های اندروید یک نقطه شروع معین (single entry point) ندارند (مثل نقطه شروع ()main).

از آنجاییکه سیستم، اجرای هر برنامه را در خط پردازش مجزا از برنامه های دیگر انجام میدهد و هر برنامه ممکن است مجوزهای مختلف داشته باشد، برنامه شما نمیتواند بطور مستقیم کامپوننتی از دیگر برنامه ها را اجرا کند. اما سیستم اندروید میتواند اینکار را برای شما انجام دهد. بنابراین، برای اجرای اکتیویتی برنامه ای دیگر، باید پیامی (message) به سیستم ارسال کنید تا قصد (intent) شما برای اجرای آن کامپوننت خاص را معلوم کند. سیستم کامپوننت مورد نظر را برایتان اجرا میکند.

dosantosdp
November 10th, 2015, 18:53
وبلاگ اندروید موبایل پروگرام برای برنامه نویسان سطح متوسط به بالا اندروید مناسب

تجربیات و مطالب مفید روزانه برای دوستان به اشتراک گذاشته میشه

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

آموزش برنامه نویسی اندروید (http://android.mobileprogram.ir)

به سوالات دوستان در زمینه برنامه نویسی اندروید هم با افتخار پاسخگو هستیم