Trong lập trình Android, Service Android là một thành phần giữ cho ứng dụng chạy trong nền để thực hiện các hoạt động lâu dài dựa trên yêu cầu của chúng tôi. Đối với Dịch vụ , chúng tôi không có bất kỳ giao diện người dùng nào và nó sẽ chạy các ứng dụng trong nền như phát nhạc trong nền hoặc xử lý các hoạt động mạng khi người dùng trong một ứng dụng khác.
Vòng đời hoạt động service trong Android
Trong android, vòng đời của service android sẽ đi theo hai con đường khác nhau Started hoặc Bound.
Started trong Service
Một Started service khi một thành phần ứng dụng, chẳng hạn như một hoạt động gọi phương thức startService(). Sau khi khởi động, nó sẽ chạy vô thời hạn trong nền ngay cả khi thành phần khởi động bị phá hủy.
Chúng tôi có thể dừng dịch vụ Đã bắt đầu bằng phương thức stopService() sử dụng hoặc dịch vụ có thể tự dừng bằng phương thức stopSelf() được goi . Trong android, thành phần service Started sẽ thực hiện một thao tác duy nhất và nó sẽ không trả về bất kỳ kết quả nào cho ứng dụng gọi nó.
Bound trong Service
Một Service bị ràng buộc khi một thành phần ứng dụng khác gọi phương thức bindService(). Dịch vụ liên kết chạy miễn là một thành phần ứng dụng khác được liên kết với nó.
Chúng tôi có thể hủy liên kết dịch vụ bằng phương thức unbindService() gọi dựa trên yêu cầu của chúng tôi. Trong android, chúng ta có thể liên kết nhiều thành phần với một dịch vụ cùng một lúc, nhưng dịch vụ sẽ bị hủy trong trường hợp tất cả các thành phần được hủy liên kết.
Sơ đồ vòng đời các dịch vụ Android
Biểu đồ sau show vòng đời của Started service, khi dịch vụ được tạo ra với startService()và vòng đời của bound service, khi dịch vụ được tạo ra với bindService().
Tạo một service trong android
public class SampleService extends Service {@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {//TODO write your own codereturn Service.START_NOT_STICKY;}@Overridepublic IBinder onBind(Intent intent) {//TODO for communication return IBinder implementationreturn null;}}
Đăng ký một service trong Manifest
<manifest ... >...<application ... ><service android:name=".SampleService" /></application>...</manifest>
Start một service trong Android
Intent intent = new Intent(this, MyService.class);startService(intent);
Callback service trong Android
public class SampleService extends Service {int mStartMode; // It indicates how to behave if the service is killedIBindermBinder; // interface for clients that bindboolean mAllowRebind; // It indicates whether onRebind should be used@Overridepublic void onCreate() {// The service is being created}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// The service is starting, due to a call to startService()return mStartMode;}@Overridepublic IBinder onBind(Intent intent) {// A client is binding to the service with bindService()return mBinder;}@Overridepublic boolean onUnbind(Intent intent) {// All clients have unbound with unbindService()return mAllowRebind;}@Overridepublic void onRebind(Intent intent) {// A client is binding to the service with bindService(),// after onUnbind() has already been called}@Overridepublic void onDestroy() {// The service is no longer used and is being destroyed}}
Ví dụ Service trong Android
public class MyService extends Service {private MediaPlayer player;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {Toast.makeText(this, "Service was Created", Toast.LENGTH_LONG).show();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {player = MediaPlayer.create(this, Settings.System.DEFAULT_RINGTONE_URI);// This will play the ringtone continuously until we stop the service.player.setLooping(true);// It will start the playerplayer.start();Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();return START_STICKY;}@Overridepublic void onDestroy() {super.onDestroy();// Stopping the player when service is destroyedplayer.stop();Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();}}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/btnStart"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="startService"android:layout_marginLeft="130dp"android:layout_marginTop="150dp"android:text="Start Service"/><Buttonandroid:id="@+id/btnstop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="stopService"android:layout_marginLeft="130dp"android:layout_marginTop="20dp"android:text="Stop Service"/></LinearLayout>
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}// Start the servicepublic void startService(View view) {startService(new Intent(this, MyService.class));}// Stop the servicepublic void stopService(View view) {stopService(new Intent(this, MyService.class));}}
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.tutlane.services"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><service android:name=".MyService" /></application></manifest>
No comments:
Post a Comment