PDA

View Full Version : استفاده از START_STICKY در service ؟



sajadpm
پنج شنبه 18 مهر 1392, 12:19 عصر
با سلام و خسته نباشید خدمت دوستان و اساتید عزیز

من سرویس ام همیشه در حال اجرا باشد یعنی سرویس ام رو هر 5 دقیقه یک بار اجرا می کنم به وسیله AlarmManager . حالا می خواستم بدونم آیا اگر از START_STICKY در سرویس ام استفاده کنم فرقی با اینکه استفاده نکنم دارد ؟
تشکر و سپاس

rubiks.kde
پنج شنبه 18 مهر 1392, 13:20 عصر
از START_STICKY زمانی استفاده میشه که شما میخواهید همیشه سرویس اجرا باشه.
درواقع باعث میشه اگه سرویس به هر دلیلی متوقف شد دوباره توسط سیستم اجرا بشه.

حالا ببینید آیا چنین کاری رو میخواهید انچام بدید یا نه؟

sajadpm
پنج شنبه 18 مهر 1392, 14:20 عصر
تشکر از پاسخ شما rubiks.kde عزیز ، من الان تست کردم دیدم اگر START_STICKY رو در سرویس قرار بدهم دیگر AlarmManager سرویس رو اجرا نمی کنه در بازه زمانی ! .
من دقیقا می خواهم مثل برنامه هایی که در زمانی که به اینترنت متصل می شوند مقداری رو به سرور می فرستند و نتیجه اش رو به صورت نوتیفکشن نمایش می دهند رو انجام بدهم !

- راه حل جدیدی برای این کار به ذهنم رسیده است این که در یک سرویس asynctask ( ارسال داده به سرور ) همراه با handler قرار بدهم و در بازده زمانی های مثال 5 دقیقه بیام این asynctask رو اجرا کنم توسط handler . و سرویس رو هم به صورتی که وقتی BOOT_COMPLETED انجام شد اجرا بشود و سرویس هم به صورت START_STICKY باشد ؟ آیا این روش مناسبی برای این کار است ؟

- و سوال دیگر از handler بهتر است استفاده کنم یا از AlarmManager برای اجرای asynctask در بازه زمانی ؟

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

rubiks.kde
پنج شنبه 18 مهر 1392, 19:48 عصر
در کل برای کاری که دارید انجام میدید به هر دو روش درست هست و کاری هست که عموما استفاده میشه.ولی توی استفاده از handler (تجربه شخصی) یه سری مشکلات بوده مثلا برنامه بعد از مدت طولانی دیگه کار نمیکرد و متوقف میشد.ولی این مشکل رو توی Alarm نداشتم.

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

public class NetworkStateReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
Log.d("app","Network connectivity change");
if(intent.getExtras()!=null) {
NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_N ETWORK_INFO);
if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
Log.i("app","Network "+ni.getTypeName()+" connected");
} else if(intent.getBooleanExtra(ConnectivityManager.EXTR A_NO_CONNECTIVITY,Boolean.FALSE)) {
Log.d("app","There's no network connectivity");
}
}
}

<receiver android:name=".NetworkStateReceiver ">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

به این صورت هروقت کانکشنی ایجاد بشه برنامه شما متوجه میشه و کارهای مورد نظر رو انجام میده.

darkenerboy
شنبه 20 مهر 1392, 09:54 صبح
سلام
اقای sajadpm (http://barnamenevis.org/member.php?248405-sajadpm) شما میشه نمونه ای از کدی که نوشتی بزاری ؟
البته اگه ممکنه
نمونه واسه BOOT_COMPLETED و START_STICKY و AlarmManager میخوام

ممنون