ورود

View Full Version : سوآل در مورد سرویسها در اندروید



perkas
دوشنبه 25 مرداد 1395, 12:44 عصر
سلام

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

ولی وقتی به صورت کامل از برنامه خارج میشم کار نمیکنه

کدهای مانی فست :


<service android:name=".MyService"
android:enabled="true"
android:exported="true"
>
</service>


کدهای سرویس :



public class MyService extends Service {
public String SimSerialNumber;


@Override
public int onStartCommand(Intent intent, int flags, int startId) {


Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {

Log.v("Test","تست سرویس");

}
},1000,5000);

return Service.START_FLAG_REDELIVERY;
}

@Override
public IBinder onBind(Intent intent) {
return null;
}

}

tux-world
دوشنبه 25 مرداد 1395, 15:44 عصر
خوب خطا کجاست الان ببینیم؟ لاگش کو؟

perkas
دوشنبه 25 مرداد 1395, 22:59 عصر
خوب خطا کجاست الان ببینیم؟ لاگش کو؟

خطا نمیده
قاعدتا وقتی سرویس استارت شد
در هر شرایطی باید به کارش ادامه بده
من هم یه لاگ و یه تایمر گذاشتم داخل سرویس
ولی تا از برنامه خارج نشدم این تایمر و لاگ به کارش ادامه میده
ولی اگه خارج شدم ( بصورت کامل ) دیگه اون تایمر هم کار نمیکنه و اون لاگ که تو تایمر هست اجرا نمیشه

rezaricky
سه شنبه 26 مرداد 1395, 14:02 عصر
سلام .
با این روشی که شما استفاده کردید سیستم عامل اندروید در هر لحظه ای که نیاز داشته باشه (مثلا حافظه رم کم داشته باشه) میتونه اون رو از حافظه برداره و تضمینی به اجرای همیشگی اش نیست .
اگه میخواید مطمئن باشید که سرویس از کار نمیفته از Foreground Service استفاده کنید .
http://www.truiton.com/2014/10/android-foreground-service-example/
http://stackoverflow.com/questions/6397754/android-implementing-startforeground-for-a-service

rezaricky
سه شنبه 26 مرداد 1395, 14:50 عصر
اینجا هم یک روش دیگه رو گفته :
http://stackoverflow.com/questions/3819676/android-timer-within-a-service

msroid
سه شنبه 26 مرداد 1395, 21:41 عصر
سلام

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

برای اینکه بعد از بسته شدن برنامه همچنان سرویس به کار خودش ادامه بده میتونید به جای کلاس Service از کلاس IntentService استفاده کنید. برای اینکه مطمئن باشید سرویس شما همیشه اجرا میشه میتونید از AlarmManager کمک بگیرید و مثلا هر 15 دقیقه یه بار اون سرویس رو اجرا کنید.(بعد از تموم شدن کار سرویس به صورت خودکار از بین میره).

پس بهترین کار استفاده از AlarmManager همراه با IntentService هست.