آموزش سرویس (Service) در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش سرویس (Service) در برنامه نویسی اندروید می پردازیم در این آموزش یاد می گیرید که اصلا سرویس (Service) چیست ؟ و به چه کاری می آید و در کجا ها استفاده می شود. در این آموزش متوجه می شوید که سرویس چه نقش مهمی را برای ما بازی می کند در این آموزش یاد می گیرد که چگونه با استفاده از سرویس می توانید task های طولانی را بدون اینکه UI را درگیرد کنید انجام دهید در ادامه با ما همراه باشید.
Service ( سرویس ) چیست ؟
سرویس یکی از major component یا کامپوننت اصلی در اندروید است .
چه کاری انجام میدهد ؟
همانطور که در قل گفتیم برای انجام Task یا Operation های طولانی از Task استفاده می شود و بدونی این که مزاحم کاربر شود در Background کار خود را انجام میدهد.
در کجا استفاده می شود ؟
هر جایی که Task های طولانی وجود داشته باشد یا Task شروع و پایان مشخصی نداشته باشد از Task استفاده می شود مثل Notification یا سرویس های پیامک و کلی چیز دیگر.
اساسا دو حالت کلی در هر سرویسی وجود دارد.
- Started یا startService ()
- Bound یا bindService()
- UnBound یا onUnbind()
- Rebound یا onRebind()
- onCreate()
- onDestroy()
Started
یک سرویس باید شروع شود تا به انجام کار بپردازد این شروع هم در اکتیویتی یا در فرگمنت اتفاق می افتد.
Bound
زمانی که بخواهید با یک وب سرویس ارتباط برقرار کنید نیاز است تا از Bound استفاده کنید تا سرویس بتواند ارتباط برقرار کند.
UnBound
زمانی که Connection بین سرور و کلاینت می خواد قطع شود از UnBound استفاده می شود.
Rebound
برای اتصال دوباره بین سرور و اپ باید از Rebound استفاده شود.
onCreate
زمانی که یک سرویس برای اولین بار اجرا می شود.
onDestroy
زمانی که یک سرویس نابود یا به پایان می رسد.
در ادامه یک سرویس ساده را مثال میزنیم
ابتدا یک فایل به نام TService.java ایجاد کنید و کد های زیر را در آن قرار دهید. (این کد اصلی نیست فقط می خوام با ساختار یک سرویس آشنا شوید.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package ir.programchi; import android.app.Service; import android.os.IBinder; import android.content.Intent; import android.os.Bundle; public class HelloService extends Service { int mStartMode; IBinder mBinder; boolean mAllowRebind; @Override public void onCreate() { } @Override public int onStartCommand(Intent intent, int flags, int startId) { return mStartMode; } @Override public IBinder onBind(Intent intent) { return mBinder; } @Override public boolean onUnbind(Intent intent) { return mAllowRebind; } @Override public void onRebind(Intent intent) { } @Override public void onDestroy() { } } |
و کد مربوط به MainActivity.java همانند زیر می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package ir.programchi; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.View; public class MainActivity extends Activity { String msg = "Android : "; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(msg, "The onCreate() event"); } public void startService(View view) { startService(new Intent(getBaseContext(), MyService.class)); } public void stopService(View view) { stopService(new Intent(getBaseContext(), MyService.class)); } } |
حالا زمان آن است سرویس اصلی را ایجاد کنیم یک فایل به نام MyService.java ایجاد کرده و کد های زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package ir.programchi; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.support.annotation.Nullable; import android.widget.Toast; /** Created by Jefferson on 8/23/2017. */ public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); } } |
و سپس در بخش AndroidManifest.xml سرویس خود را ریجیستر کنید.
1 | <service android:name=".MyService" /> |
این آموزش هم به پایان رسید.
موفق و موید باشید.
سلام
برای اینکه مثلا تنظیم بکنیم که 7 روز یکبار از دیتابیس بکاپ بگیری خودکار انجام شود با استفاده از سرویس انجام می شود؟
اگه اینکار با استفاده از سرویس انجام می شود لطفا آموزشی در این رابطه بزارید
با تشکر از آموزش خوبتان
خیر با استفاده از alram باید این بخش را ایجاد کنید سرویس در اینجا کاربردی ندارد.
سلام . میخوام بدونم اگه بخوام یه سرویس ایجاد کنم که بدون اینکه توسط اپلیکیشن دیگه ای فراخوانی بشه ، مثلا هر 5 دقیقه یک فولدر رو چک کنه و فایلهای موجود در اون رو آپلود کنه ، باید چکار کنم؟
باید از کلاس سرویس استفاده کنید و برای اجرا آن در همه 5 دقیقه باید از alarm manager استفاده کنید هر دوی آموزش ها در سایت موجود است می توانید از لینک های زیر استفاده کنید.
آموزش Alram در برنامه نویسی اندروید
https://programchi.ir/2017/05/26/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-alarm-manager-%d8%af%d8%b1-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d9%86%d9%88%db%8c%d8%b3%db%8c-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/
آموزش Service در برنامه نویسی اندروید
https://programchi.ir/2017/08/09/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b3%d8%b1%d9%88%db%8c%d8%b3-service-%d8%af%d8%b1-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d9%86%d9%88%db%8c%d8%b3%db%8c-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/
موفق باشید.
سلام اقای جعفری پور پروژه من با استفاده از ترد.اسلیپ هر 1 ساعت یک بار یک کار رو انجام میده ولی تا وقتی برنامه بازه و وقتی کاربر برنامه رو میبنده دیگه عمل نمیکنه برای حل این مشکل باید چیکار کنم با استفاده از سرویس حل میشه؟
سلام و درود بله شما باید از سرویس استفاده کنید شما می توانید از SystemClock.sleep هم استفاده کنید.
آلارم منیجر هم نیاز به سرویس داره ؟؟
می تواند داشته باشد تا خود Alaram manager را صدا بزند.
باسلام…
من وقتی میخوام سرویس رو تو منیفست ریجیستر کنم خطای المنت غیرمنتظره میده:error: unexpected element found in …چکارش کنم؟
باتشکر از آموزش های خوبتون.
با سلام خدمت شما و خسته نباشید
شرمنده من یه سرویس نوشتم که پایگاه داده انلاین رو چک میکنه که زیر اندروید 9 داره به درستی کار میکنه ولی برای اندروید 9 وقتی برنامه بسته میشه سرویس بصورت خودکار onDestory میشه لطفا کمک کنید که چیکار کنم
پرمیشن زیر رو اضافه کنید
با سلام
من می خوام یه اپ ایجاد کنم که در اون یه فرایندی در یه زمان بیست روزه کنترل می شه.در طی این بیست روز هر روز یه نوتیفیکیشن به نمایش درمیاد و یک الارم برای انجام کار خاصی به شخص نمایش مده.
حالا من بایداز سرویس استفاده کنم یا اینکه از الارم منیجر؟
تئوری این کار چطوری هست؟
اقا سلام . من میخام این سرویس در هر حالتی که باشه بسته نشه . همیشه همیشه باز باشه و غیرفعال نشه . باید چیکار کنم ؟؟