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

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


ali8968

سوال

سلام دوستان

چجوری میشه کاری کرد که یه اکتیویتی در صورت بسته شدن برنامه بازم کارکنه

فک کنم باید از سرویس استفاده کنم اما چجوری؟

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

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

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

سلام

پژمان جان چیزی رو که میگی رو عملا انجام بده ببین میشه یا نه ؟

بعد اگه جواب نداد میشه به وسیله خلقه Do While یه جوری بی نهایتش کرد

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

اکتیویتی که بسته شه دیگه بسته شده و کاریش نمیتونی کنی.

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

این کد اکتیویتی:


#Region Attributes
#ApplicationLabel: B4A Example
#VersionCode: 1
#VersionName:
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
Dim timer1 As Timer
End Sub

Sub Globals
Dim lbl1 As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
timer1.Initialize("t1",1000)
lbl1.Initialize("lbl1")
lbl1.Text = "0"
lbl1.TextSize = 20
Activity.AddView(lbl1,0,0,50%x,50%y)
End Sub
Sub t1_Tick
Dim num = lbl1.Text +1 As Int
lbl1.Text = num
End Sub
Sub Activity_Pause(UserClosed As Boolean)
StartService(ss)
End Sub

اینم کد سرویس:


#Region Service Attributes
#StartAtBoot: False
#End Region

Sub Process_Globals

End Sub
Sub Service_Create
Main.timer1.Enabled = True
End Sub

Sub Service_Start (StartingIntent As Intent)

End Sub

Sub Service_Destroy

End Sub



اگه حرف تو درست باشه وقتی برنامه بسته میشه باید به مقدار لیبل همچنان اضافه شه، ولی اینطور نیست.

خودت ببین.

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

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

یعنی راهی نداره؟

مهران جان پس همین مثالی که زدی رو باید تو سرویس انجام بدیم.

یه متغیر int داخل proces_Gloubal تعریف کنیم و داخل سرویس هم تایمری جدا بذاریم و هر بار به مقدار همون متغیر یکی اضافه کنه و وقتی اکتیویتی دوباره اجرا شد مقدارش رو بریزه داخل همون لیبیل اکتیویتی.

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

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

واتس اپو لاین و اینا پس چجوری ان.......؟؟

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

واتس اپو لاین و اینا پس چجوری ان.......؟؟
وقتی اکتیویتی دوباره اجرا شد مقدارش رو بریزه داخل همون

خودت جواب خودت رو حدودا دادی!

راستش من خیلی دقیق نمیدونم اینا چیکار میکنن ولی تا جایی که من مطالعه کردم (نمیگم 100%) ، نمیشه وقتی اکتیویتی بستس توش تغییری اعمال کرد.

ولی راهی که همین الان به ذهنم میرسه اینه که: (گرچه وقتی درگیرش بشی راه های بهتری هم پیدا میکنی)

اگه دقت کرده باشی مثلا تو وایبر، وقتی بازش میکنی پیامها اگه زیاد باشن شروع میکنن به لود شدن (یعنی از قبل اتفاقی تو اکتیویتی نیفتاده.)

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

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

موفق باشی.

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

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

 

برای اجرای سرویس به صورت  زمان بندی   نیازی به  تایمر نیست  سرویسها  قابلیت زماندی دارند

StartServiceAt(Me,DateTime.Now+30*1000,True)

اینو در  قسمت  Service_Start  بنویسید  اون زمان  الان هر 30 ثانیه یکبار هست میتونید  خودتون تنظیم کنید مثلا روزی یکبار یک چیزی رو  بیاد چک کنه . این سرویس اگر اتواستارت بشه هرگز Kill  نمیشه مگر برنامه رو پاک کنن.

بله شما درست می فرمایید 

اما برای بار اول وقتی برنامه بسته میشه سرویس هم بسته میشه ، و برای زنده شده مجدد باید گوشی ری استارت بشه

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

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

چجوری یه نوتیفیکشن داخل سرویس به کار بگیریم که با بستن برنامه نوتیفیکشن نره کدهای نوتیفیکشن می دونم داخل سرویس هم میزارم ولی نوتیفیکشن با باز کردن برنامه ایجاد نمیشه چکار کنم؟

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

از منوی project یه سرویس ایجاد کن

توی ساب Service_Create کدهایی که میخوای به محض ران شدن سرویس اجرا بشه رو بذار (مثل Activity_Create)

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

مثلا با StartService میتونی از توی اکتیویتی دستور اجرا یه سرویس رو بدی

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

چند تا سوال دیگه

1. پس من تویه یه اکتیویتی سرویس رو استارت کنم بعد اگه از برنامه بیام بیرون اون سرویس همچنان فعاله درسته؟

2.من میخوام یه دستور شرطی تو سرویس بزارم که زمانی که شرط برقرار شد یه نوتیفیکیشن اجرا بشه پس این دستور شرطی رو تو

Service_Create بنویسم؟

3.بعد واسه اینکه این دستور شرطی مدام اجرا شه چیکار کنم؟

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

بله، سرویسی که با StartService شروع به کار کنه تا وقتی خود کاربر از تنظیمات گوشیش اونو نبنده و یا خود برنامه با StopService متوقفش نکنه همچنان به کار خودش ادامه میده. البته با خاموش و روشن شدن گوشی هم ممکنه سرویس متوقف شه.

در مورد سوال دومتون Service_Create مختص وقتی هستش که شما با StartService سرویس مربوطه رو اجرا میکنید! و دیگه ربطی به روند کار سرویس نداره. یعنی فقط همون لحظه اوله! از یه تایمر میتونید استفاده کنید و یا راه هایی که شاید خودتون درنظر داشته باشید.

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

موفق باشی.

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

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

1 درسته

2 StartService

3 میتونی توی رویداد تیک یه تایمر کدها رو تکرار کنی.. راه های زیادی هست

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

توی Service_Create تایمر رو فعال کن و Interval رو بذار 1 ساعت که میشه : 3600000

و توی Timer_Tick دستورت رو قرار بده.

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

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

 

برای اجرای سرویس به صورت  زمان بندی   نیازی به  تایمر نیست  سرویسها  قابلیت زماندی دارند

StartServiceAt(Me,DateTime.Now+30*1000,True)

اینو در  قسمت  Service_Start  بنویسید  اون زمان  الان هر 30 ثانیه یکبار هست میتونید  خودتون تنظیم کنید مثلا روزی یکبار یک چیزی رو  بیاد چک کنه . این سرویس اگر اتواستارت بشه هرگز Kill  نمیشه مگر برنامه رو پاک کنن.

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

ممنون دوستان خیلی خوب بود من اینارو نمیدونستم.

حالا یه سوال:

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

یعنی چیز دیگه ای نداره؟ فقط باید قسمت Create اتفاقاتی که قرار بیفته بنویسیم؟

مثلا فکر کنید داخل اکتیویتی یه تایمر داریم و با کلیک روی یه باتون اون تایمر رو فعال میکنیم و به کار خودش ادامه میده. حالا وقتی برنامه توقف شد میخوایم که اون تایمر به کارش ادامه بده.... (همون تایمری که داخل اکتیویتی بوده، و نه اینکه تعریف تایمری جدا در سرویس)

خودم الان که فکر میکنم میگم میشه اون تایمری که تو اکتیویتی داره کار میکنه رو داخل:

Process_Globals

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

Main.time1.Enabled=True

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

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

بایگانی شده

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

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

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