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

جلوگیری از بسته شدن سرویس ، توسط برنامه optimize (پیشفرض در اندروید های 5 و بالاتر)


fun_code

سوال

با سلام و عرض ادب

 

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

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

مشکل اینجا بود که ، برنامه optimize که در اندروید های 5 و بالاتر بصورت پیشفرض وجود داره و هدف بهبود مصرف باتری هست ، میاد سرویس و کلا برنامه رو بطور کامل میبنده !

با این کار برنامه کلا استاپ شده و اعلانی رو نمایش نمیده...

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

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

 

البته از sticky و ... هم استفاده کردم نشد.

 

خواستم بپرسم چطوری این مشکل رو برطرف کنم ؟ (فکر کنم کافه بازار این مورد رو دور زده)

به نظرم مورد نیاز بسیاری از دوستان خواهد بود.

 

از راهنمایی شما سپاسگزارم

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

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

 

اول سرویستون این کد رو اضافه کنید

 

دیگه بسته میشه

 

موقع استارت گوشی هم میاد بالا اتوماتیک

#Region Module Attributes
	#StartAtBoot: True
	#StartCommandReturnValue: android.app.Service.START_STICKY
#End Region

با استیکی نتونستیم ک تاپیکو زدیم مهندس 

با این میچسبونه سرویسو اما خب بازم بسته میشه 

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

@,

سلام

خیر از این روش استفاده نکردم.

ممنونم بابت کمکتون.

فقط چند سوال دارم که ممنون میشم راهنماییم کنید:

 

1. متغیر pn از چه نوعی است ؟   از نوع PNbrodcastrecive

 

2. رویداد pn_OnReceive دقیقا به چه چیزی گوش میده ؟ یعنی چه موقع این رویداد اجرا میشه ؟   این متد به رویدادهایی که تو سطح سیستم عامل (مثل تغییر درصد شارژ باتری و روشن شدن صفحه و ... )گوش میده و زمانی اجرا میشه که اون اکشنی که بش دادی فعال بشه مثلا اگه اکشن android.intent.action.BATTERY_CHANGED رو بش بدی به محض اینکه باتری تغییر کرد اکشن دریافت میشه

 

3. اکشن android.intent.action.TIME_TICK به چه موردی مربوط هست ؟  این اکشن هر یک دقیقه یک بار وقتی ساعت یک دقیقه جلو میره دریافت میشه   یعنی هر از 999 میلی ثانیه این اکشن فعال و رویداد pn_OnReceive اجرا می شود ؟ نه عزیزم این میاد و اولویت بندی میکنه اکشن هایی که دادی رو هر کدوم عددش بالاتر باشه زودتر دریافت میشه

 

4. اون کدی که در منیفست اضافه میشه چیزی شبیه به همین کد زیر هست ؟ آره دوست عزیز اون کد معادل (Service.StartForeground(0,Null هست

Service.StartForeground(0,Null)
 و یا
 #StartCommandReturnValue: android.app.Service.START_STICKY

عذر میخوام سوالای زیادی پرسیدم.

اما کم پیش میاد فردی مثل شما پیدا بشه...

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

بازم ممنونم از لطفتون

:give_rose:

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

@,

ببخشید یه سوال دیگه هم برام پیش اومد:

در کد زیر ،

AddServiceText(yourservice,android:process=":yourappname_background")

yourappname همون نام پکیج هست  همراه با _background ؟   بله همینطوره

 

در نسخه جدید B4A تابعی به نام StartServiceAtExact اضافه شده...

فکر میکنم این مشکل رو برطرف میکنه...

اینطور که پیداست روی اندروید های 4.4 و بالاتر قابل اجرا است.

یعنی باید نسخه اندروید رو چک کنم و نسبت به اون از StartServiceAtExact و با StartServiceAt استفاده کنم. درست فکر میکنم یا روش شما مطمئن تر هست ؟ (البته فکر میکنم راهنمایی شما جامع هست و همه نوع نیاز رو برطرف میکنه.کدی که گفتم فقط برای اجرای سرویس در فواصل زمانی متفاوت بصورت مکرر است.) StartServiceAtExact و  StartServiceAt در واقع یکی ان ولی StartServiceAtExact بهینه تره و هردوتا هم کارشون اجرای سرویس تو یه زمان خاص بر حسب میلی ثانیه هست مثلا (60000)StartServiceAt یعنی اینکه سرویس رو یک دقیقه دیگه استارت کن

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

بایگانی شده

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

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

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