در این نوشته به معماری اپلیکیشن های اندروید و بررسی فایل AndroidManifest.xml
می پردازم.
۱- AndroidManifest.xml
تنظیمات و کامپوننت ها و Permission
های استفاده شده در یک برنامه، در فایل AndroidManifest.xml
تعریف می شوند. برای مثال تمامی Activity
ها و Service
های یک برنامه باید در این فایل تعریف شوند.
این فایل دربرگیرنده سطوح دسترسی و یا Permission
ها نیز هست. برای مثال اگر برنامه نیاز به دسترسی به اینترنت داشته باشد باید مانند زیر در این فایل ثبت شود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
< ?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ir.mohammai.android.temperature" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Convert" android:label="@string/app_name"> <intent -filter> <action android:name="android.intent.action.MAIN"></action> <category android:name="android.intent.category.LAUNCHER"></category> </intent> </activity> </application> <uses -sdk android:minSdkVersion="9"></uses> </manifest> |
خاصیت package
در واقع کلاس پایه ایست که اشیاء جاوا به آن اشاره کنند. اگر اشیاء جاوا مرتبط به پکیج دیگری باشند، آن پکیج باید کاملا تعریف شود.
Google Play مقید به این هست که هر برنامه دارای پکیج یکتای خود باشد. به همین دلیل بود که در معرفی پکیج من از ir.mohammadi استفاده کردم. این کار مانع از یکی شدن نام برنامه ها می شود.
android:versionName
و android:versionCode
تعیین کننده نسخه برنامه هستند. versionName
نسخه ای است که کاربران می بینند و می تواند هر عددی باشد. اما versionCode
یک عدد است. اندروید مارکت، فقط به versionCode
کار دارد و اگر شما می خواهید برای برنامه خود نسخه جدیدتری را ارائه دهید، versionCode
نسخه جدید حتما باید از نسخه فعلی بیشتر باشد.
تگ activity
یک Activity
را تعریف می کند. در کد بالا تگ activity
به کلاس Convert
در پکیج ir.mohammadi.android.temperature
اشاره دارد. تگ intent-filter
نیز برای این کلاس تعریف شده است تا وقتی که این Activity
اجرا شد، برنامه اجرا شود (به واسطه android:name=”android.intent.action.MAIN”
). تگ category android:name=”android.intent.category.LAUNCHER” نیز تعریف می شود تا برنامه به منوهای دستگاه اندرویدی اضافه شود.
مقدار string/app_name@
به فایل های منبع یا resource
اشاره می کند که شامل مقداری ست که نام برنامه را تعیین می کند. مزیت استفاده از فایل های resource
این هست که می توان resource
های متفاوتی با نوع های متفاوت ایجاد کرد و از آن در تمامی برنامه استفاده کرد. مزیت دیگر آن توانایی ترجمه برنامه به زبان های دیگر است.
uses-sdk
که بخشی از فایل AndroidManifest.xml
است، در واقع تعیین کننده پایین ترین نسخه اندروید SDK مورد نظر برای اجرای برنامه است. با استفاده از uses-sdk
، برنامه بر روی نسخه های اندروید پایین تر از نسخه تعیین شده اجرا نمی شود.
۲- Activity
ها و چرخه حیات
سیستم اندروید چرخه حیات برنامه ها را کنترل می کند. ممکن است اندروید در هر زمانی، برنامه را از بین ببرد (destroy
) و یا به حالت تعلیق (stop
) ببرد. این تبدیل حالت ممکن است به خاطر برقراری یک تماس باشد. اندروید چرخه حیات هر Activity
را بر اساس متدهای از پیش تعریف شده کنترل می کند. مهمترین این متدها عبارتند از:
• ()onSaveInstanceState
: پس از اینکه Activity
معلق شد، صدا زده می شود. این تابع برای دخیره اطلاعات به کار برده می شود بنابراین برنامه به واسطه این ذخیره اطلاعات، می تواند در حالت قبل دوباره شروع به کار کند.
• ()onPause
: وقتی که Activity
پایان می یابد، صدا زده می شود و برای دخیره اطلاعات یا آزاد کردن منابع به کار برده می شود.
• ()onResume
: وقتی صدا زده می شود که برنامه، مجددا شروع به کار کند و می تواند برای مقداردهی اولیه فیلدها به کار رود.
۳- تغییر تنظیمات
همیشه ممکن است یک Activity
راه اندازی مجدد شود. بنابراین نیاز به تغییرات تنظیمات می باشد. این تغییر تنظیمات ممکن است به هر دلیلی اتفاق بیفتد. برای مثال اگر کاربر جهت (Orientation
) گوشی خود را عوض کند این تغییر تنظیمات نیاز خواهد بود. چون اندروید فرض را بر این دارد که Activity
نیاز به منابع دیگری در این جهت دارد و در نتیجه Activity
راه اندازی مجدد می شود.
در ایمولاتور با Ctrl+F11
می توانید جهت گوشی را عوض کنید.
یکی از امکاناتی که اندروید در اختیار ما قرار می دهد این است که می توان از راه اندازی مجدد برنامه و به دنبال آن تغییر تنظیمات جلوگیری کرد. این کار با تعریف خاصیت configChanges
در تگ Activity
مورد نظر در فایل AndroidManifest.xml
انجام می گیرد. در کد زیر Activity
مورد نظر با تغییر جهت یا مکان کیبورد تغییر نخواهد کرد:
1 2 3 4 |
<activity android:name=".ProgressTestActivity" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden|keyboard"> </activity> |
۴- Context
کلاس android.content.Context
امکان اتصال به سیستم اندروید و منابع پروژه را فراهم می آورد. این کلاس رابط اطلاعات در مورد محیط نرم افزار نیز هست.
Context
امکان اتصال به سرویس ها مانند سرویس موقعیت یابی را نیز فراهم می آورد.
Activity
ها و Service
ها کلاس Context
را گسترش می دهند.