سلام و خسته نباشید خدمت همه
قسمت چهارم از مجموعه سوالات مصاحبه شغلی برنامه نویس اندروید را در پیش داریم که میتوانید از طریق لینک های زیر به توضیحات و قسمت های قبلی دسترسی داشته باشید ، امروز میریم سراغ ده سوال بعدی…

سوالات مصاحبه شغلی برنامه نویس اندروید – قسمت اول
سوالات مصاحبه شغلی برنامه نویس اندروید – قسمت دوم

سوالات مصاحبه شغلی برنامه نویس اندروید – قسمت سوم


۳۱ـ ThreadPool چیست؟ آیا استفاده از آن بهتر از استفاده از چند Thread جداگانه است‌؟

ساخت و نابودی Thread ها باعث مصرف زیاد CPU می شوند پس وقتی که ما میخواهیم برای چند عملیات کوچک از چند Thread به صورت همزمان استفاده بکنیم بخش زیادی از CPU را درگیر کار میکنیم و این مورد در زمان انجام عملیات ها SEتاثیر به سزایی دارد. ThreadPool متشکل از task queue و چند worker thread است که توانایی اجرای چند عملیات به صورت همزمان را دارند.

۳۲. تفاوت Serializable و Parcelable چیست ؟

عمل Serialize کردن به معنی تبدیل یک آبجکت به جریانی از بایت ها جهت ذخیره سازی در حافظه است تا بتوانیم دوباره در زمانی دیگر همان state آبجکت را ساخته و از آن استفاده کنیم.

چگونه اجازه ی Serialize شدن یک آبجکت را ندهیم ؟ اگر یک متغیر را به صورت transient تعریف کنیم جلوی serialize شدن آن را می گیریم.

Serializable یک interface استاندارد جاوا است؛ در صورتی که Parcelable یک interface مختص اندروید است که برای آن خودتان Serializable را پیاده سازی می کنید. Parcelable ساخته شد تا بهینه تر از Serializable عمل کند ( مشکلی که با این هدف به وجود آمد این است که reflection در آن استفاده شده و این مورد کار را کند می کند. این مکانیزم همچنین باعث ساخت چندین آبجکت موقت می شود که می تواند باعث مشکلات garbage collection نیز بشود. )

۳۳. تفاوت Activity و Service چیست ؟

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

۳۴. چگونه رابط کاربری یک اکتیویتی را از سرویسی در پس زمینه تغییر دهیم ؟

باید یک LocalBroadcastReceiver در اکتیویتی ایجاد کنیم و هنگامی که میخواستیم تغییری در رابط کاربری ایجاد کنیم یک broadcast همراه داده های مورد نیاز توسط intent از سرویس ارسال کنیم. تا زمانی که اکتیویتی در foreground قرار دارد رابط کاربری از طرف پس زمینه تغییر پیدا می کند و باید اطمینان حاصل کنید که broadcast receiver را در متد اکتیویتی نابود می کنید تا باعث به وجود آمدن نشت حافظه (
memory leaks ) نشوید. همچنین می توانید از Handler ها برای انتقال اطلاعات استفاده بکنید.

۳۵ـ Intent چیست؟

Intent ها پیام هایی هستند که برای انتقال اطلاعات بین کامپوننت اندروید استفاده می شوند، برای مثال : اجرای یک اکتیویتی یا باز کردن یک وب ویو و…
دو نوع intent وجود دارد :

Implicit : این نوع اینتنت زمانی استفاده می شود که ما intent پیش فرض اندروید را فراخوانی می کنیم برای مثال : هنگام ارسال sms و ارسال email و شماره گیری.

explicit : این نوع اینتنت ها زمانی استفاده می شوند که شما یک اکتیویتی دیگر از همان اپلیکیشن را فراخوانی می کنید.

۳۶ـ Sticky Intent ها چیستند ؟

Sticky Intent ها توانایی ارتباط بین یک تابع و یک سرویس را به ما می دهند متد sendStickyBroadcast یک sendBroadcast به اصطلاح چسبنده را اجرا می کند. یعنی اینتنتی که ارسال می کند بعد از اینکه کار broadcast تمام شد باقی می ماند که باز هم بتوان داده ها را به سرعت توسط متد registerReceiver دریافت کرد. برای مثال اگر از اینتنت ACTION_BUTTERY_CHANGED جهت گرفتن رخداد های باتری استفاده کنیم هنگامی که از متد registerReceiver استفاده کنید [ حتی اگر مقدار BroadcastReceiver را در متد registerReceiver برابر null قرار دهیم ] ما intent ای را که مربوط به آخرین broadcast آن action است دریافت می کنیم ، اینگونه شما می توانید وضعیت باتری را دریافت کنید ( بدون نیاز به بررسی تمامی حالات باتری در ادامه کار ندارید. )

۳۷ـ Pending Intent چیست ؟

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

۳۸ـ Action چیست ؟

توضیحات یک Intent است برای مثال ACTION_CALL برای انجام عملیات تماس استفاده می شود.

۳۹ـ Intent Filter ها چیستند ؟

نوع مشخصی از Intent ها هستند که اکتیویتی ها یا سرویس ها می توانند به آن ها واکنش نشان دهند

۴۰. فرگمنت ها چیستند ؟

فرگمنت ها یک بخش دارای رابط کاربری هستند که به اکتیویتی ها متصل می شوند و می تواند دوباره با اتصال به اکتیویتی های دیگر از آن ها استفاده کرد. چندین فرگمنت می توانند همزمان به یک اکتیویتی متصل باشند؛ هر فرگمنت حتما باید به یک اکتیویتی متصل باشد و چرخه حیات آن به اکتیویتی میزبان آن وابسته است.