رفتن به مطلب
  • 0

foreground service


rasool.g

سوال

سرویس رو اگه foreground کنیم دیکه غیر فعال و نابود نمیشه؟

کلا بهترین گزینه برای وقتی که می خوایم سرویس حتما باقی بمونه فکر کنم همین گزینه هست. درسته؟

خود نوتیفیکیشن نرم افزار b4a-bridge که وضعیت کانکشن رو نشون میده مثلا فکر کنم از نوع نوتیفیکیشن مربوط به سرویس foreground باشه. همینطوره؟

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

4 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

درود،

فرایندهای foreground در زمان اجرای برنامه و با استفاده از منابع رزرو شده توسط اپلیکیشن اجرا میشن و با بسته شدن اپ اون ها هم خاتمه پیدا میکنن!

در مقابل فعالیت های background مانند سرویس اگر به درستی تعریف شده باشند میتونن همواره در حال اجرا بمونن. اگر نیاز دارید سرویستون همیشه در حال اجرا باشه (حتی زمانی که دستگاه ریستارت میشه) میتونید مشخصه ی StartAtBoot رو True کنید. خطی که در سرویس مشاهده میکنید رو به شکل زیر تغییر بدید:

#StartAtBoot: True

با اینکار سرویس اولین بار توسط برنامه شما اجرا میشه و باقی میمونه. با ریستارت شدن دستگاه هم دوباره اجرا میشه. درکل همیشه فعال میمونه مگر اینکه کاربر اون رو از تنظیمات دستگاهش ببنده! اون رو هم فکر میکنم بتونید در بخش Service_Destroy کنترل کنید... (البته از این مطمئن نیستم، کارم بهش نیفتاده)

موفق باشید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

در ادامه ی صحبت های استاد محمودی عزیز، شما این کد رو هم بعد از StartAtBoot  هم قرار بدید »

	#StartCommandReturnValue: android.app.Service.START_STICKY

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

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

سرویس در حالت پیشفرض ( background ) در نسخه های پایین تر اندروید مثلا نسخه 4 همیشه و به صورت دائمی کار میکنه (غیر از این که force close بشه) . ولی در نسخه های بالاتر (مثلا اندروید 7) معمولا پس از مدتی بسته میشه. حتی اگه سیستم مشکل کمبود رم نداشته باشه. نمیدونم شاید برای کاهش مصرف باتری این کار میکنه. ولی اگه 

#StartCommandReturnValue: android.app.Service.START_STICKY

استفاده شده باشه، بعدا دوباره سرویس اجرا میشه.

ولی این که سیستم کی سرویس رو متوقف میکنه و کی دوباره اونو اجرا میکنه اصلا معلوم و قابل تشخیص نیست.

استفاده از

StartServiceAt

برای راه اندازی دوباره سرویس پس از بسته شدن هم ظاهرا دیگه در نسخه های جدید اندروید بدرد نمی خوره و کاربردی نداره. (این حور که از تست های قبلی به خاطر دارم) . یعنی تا جایی که یادمه کار نمیکرد.

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

(سرویس foregound رو من باسه نصف روز تست کردم. به صورت پیوسته فعال بود و سیستم متوقفش نمیکرد)

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

حالا باز سوالی که برام پیش اومده اینه که چجوری میشه نوتیفیکیشن سرویس foreground رو اپدیت کرد؟

باسه اپدیت من دوباره

StartForeground()

  رو فراخوانی میکنم. ایا این روش، روش استانداردیه یا روش بهتری هم وجود داره؟

ایکون نوتیفیکیشن رو هم نمیتونم تغییر بدم. ایکون دیگه ای میزارم کنار ایکون برنامه بعد از کلیک روی دیباگ یا ریلیز پاک میشه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...