Một dịch vụ là một thành phần mà chạy trên nền tảng để thực hiện các hoạt động dài chạy mà không cần phải tương tác với người sử dụng và nó hoạt động ngay cả khi ứng dụng lập trình android bị phá hủy. Một dịch vụ về cơ bản có thể có hai trạng thái
Một dịch vụ có các phương thức gọi lại vòng đời mà bạn có thể thực hiện để theo dõi các thay đổi trong trạng thái của dịch vụ và bạn có thể thực hiện công việc ở giai đoạn thích hợp.
Sơ đồ bên trái cho thấy vòng đời khi dịch vụ được tạo bằng startService () và sơ đồ bên phải cho thấy vòng đời khi dịch vụ được tạo bằng bindService (): (image courtesy: android.com)
Để tạo một dịch vụ, bạn tạo một lớp android mở rộng lớp cơ sở dịch vụ hoặc một trong các lớp con hiện có của nó. Lớp cơ sở dịch vụ định nghĩa các phương thức gọi lại khác nhau và quan trọng nhất được đưa ra dưới đây.
Dịch vụ bộ xương sau đây thể hiện từng phương pháp vòng đời
Sau đây là nội dung của tệp hoạt động chính đã sửa đổi MainActivity.java .
Tệp này có thể bao gồm từng phương pháp vòng đời cơ bản. Chúng ta đã thêm các phương thức startService () và stopService () để bắt đầu và ngừng dịch vụ.
Sau đây là nội dung của MyService.java . Tệp này có thể triển khai một hoặc nhiều phương thức được liên kết với Dịch vụ dựa trên các yêu cầu.
Bây giờ chúng ta sẽ chỉ thực hiện hai phương thức onStartCommand () và onDestroy ()
Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào Chạy biểu tượng từ thanh công cụ.
Android Studio cài đặt ứng dụng trên AVD của bạn và khởi động ứng dụng và nếu mọi thứ đều ổn với thiết lập và ứng dụng của bạn, ứng dụng sẽ hiển thị cửa sổ Trình mô phỏng sau
Bây giờ để bắt đầu dịch vụ của bạn, hãy kích nút Start Service , điều này sẽ bắt đầu dịch vụ và theo chương trình của chúng ta trong phương thức onStartCommand () , một thông báo Service Started sẽ xuất hiện ở phía dưới trình mô phỏng như sau:
Để ngừng dịch vụ, bạn có thể nhấp vào nút Dừng dịch vụ.
| Sr.No. | Tiểu bang & Mô tả |
|---|---|
| 1 | Đã bắt đầu Một dịch vụ được bắt đầu khi một thành phần ứng dụng, chẳng hạn như một hoạt động, khởi động nó bằng cách gọi startService (). Sau khi bắt đầu, một dịch vụ có thể chạy trong nền vô thời hạn, ngay cả khi thành phần bắt đầu nó bị hủy. |
| 2 | Ràng buộc Một dịch vụ bị ràng buộc khi một thành phần ứng dụng liên kết với nó bằng cách gọi bindService () . Một dịch vụ ràng buộc cung cấp một giao diện client-server cho phép các thành phần tương tác với dịch vụ, gửi các yêu cầu, nhận kết quả, và thậm chí làm như vậy trên các tiến trình với truyền thông interprocess (IPC). |
Sơ đồ bên trái cho thấy vòng đời khi dịch vụ được tạo bằng startService () và sơ đồ bên phải cho thấy vòng đời khi dịch vụ được tạo bằng bindService (): (image courtesy: android.com)
![]() |
| ảnh minh họa |
Để tạo một dịch vụ, bạn tạo một lớp android mở rộng lớp cơ sở dịch vụ hoặc một trong các lớp con hiện có của nó. Lớp cơ sở dịch vụ định nghĩa các phương thức gọi lại khác nhau và quan trọng nhất được đưa ra dưới đây.
Bạn không cần phải thực hiện tất cả các phương thức callbacks. Tuy nhiên, điều quan trọng là bạn hiểu từng cái và triển khai những ứng dụng đảm bảo ứng dụng của bạn hoạt động theo cách người dùng mong đợi.
| Sr.No. | Gọi lại & Mô tả |
|---|---|
| 1 | onStartCommand () Hệ thống gọi phương thức này khi một thành phần khác, chẳng hạn như một hoạt động, yêu cầu khởi động dịch vụ, bằng cách gọi hàm startService () . Nếu bạn thực hiện phương pháp này, bạn có trách nhiệm dừng dịch vụ khi công việc của nó được thực hiện, bằng cách gọi phương thức stopSelf () hoặc stopService () . |
| 2 | onBind () Hệ thống gọi phương thức này khi một thành phần khác muốn liên kết với dịch vụ bằng cách gọi bindService () . Nếu bạn thực hiện phương pháp này, bạn phải cung cấp một giao diện mà khách hàng sử dụng để giao tiếp với dịch vụ, bằng cách trả về một đối tượng IBinder . Bạn phải luôn luôn thực hiện phương thức này, nhưng nếu bạn không muốn cho phép ràng buộc, thì bạn nên trả về null . |
| 3 | onUnbind () Hệ thống gọi phương thức này khi tất cả các máy khách đã ngắt kết nối khỏi một giao diện cụ thể được dịch vụ xuất bản. |
| 4 | onRebind () Hệ thống gọi phương thức này khi các máy khách mới đã kết nối với dịch vụ, sau khi nó đã được thông báo trước đó rằng tất cả đã bị ngắt kết nối trong onUnbind (Intent) của nó . |
| 5 | onCreate () Hệ thống gọi phương thức này khi dịch vụ được tạo đầu tiên bằng cách sử dụng onStartCommand () hoặc onBind () . Cuộc gọi này là bắt buộc để thực hiện thiết lập một lần. |
| 6 | onDestroy () Hệ thống gọi phương thức này khi dịch vụ không còn được sử dụng và đang bị hủy. Dịch vụ của bạn nên thực hiện điều này để dọn sạch mọi tài nguyên chẳng hạn như chủ đề, người nghe đã đăng ký, người nhận, v.v. |
package com.tutorialspoint; import android.app.Service; import android.os.IBinder; import android.content.Intent; import android.os.Bundle; public class HelloService extends Service { /** indicates how to behave if the service is killed */ int mStartMode; /** interface for clients that bind */ IBinder mBinder; /** indicates whether onRebind should be used */ boolean mAllowRebind; /** Called when the service is being created. */ @Override public void onCreate() { } /** The service is starting, due to a call to startService() */ @Override public int onStartCommand(Intent intent, int flags, int startId) { return mStartMode; } /** A client is binding to the service with bindService() */ @Override public IBinder onBind(Intent intent) { return mBinder; } /** Called when all clients have unbound with unbindService() */ @Override public boolean onUnbind(Intent intent) { return mAllowRebind; } /** Called when a client is binding to the service with bindService()*/ @Override public void onRebind(Intent intent) { } /** Called when The service is no longer used and is being destroyed */ @Override public void onDestroy() { } }
Thí dụ
Ví dụ này sẽ đưa bạn qua các bước đơn giản để hiển thị cách tạo Dịch vụ Android của riêng bạn. Làm theo các bước sau để sửa đổi ứng dụng Android mà chúng tôi đã tạo trong chương Hello World Example| Bậc thang | Sự miêu tả |
|---|---|
| 1 | Bạn sẽ sử dụng Android StudioIDE để tạo ứng dụng Android và đặt tênứng dụng là Ứng dụng của tôi dưới dạng góicom.example.tutorialspoint7.myapplication như được giải thích trong chương Hello World Example . |
| 2 | Sửa đổi tệp hoạt động chính MainActivity.java để thêm các phương thứcstartService () và stopService () . |
| 3 | Tạo một tệp java mới MyService.java trong gói com.example.My Application . Tệp này sẽ có triển khai các phương pháp liên quan đến dịch vụ Android. |
| 4 | Xác định dịch vụ của bạn trong tệp Android Manifest.xml bằng cách sử dụng thẻ <service ... />. Ứng dụng có thể có một hoặc nhiều dịch vụ mà không có bất kỳ hạn chế nào. |
| 5 | Sửa đổi nội dung mặc định của tệp res / layout / activity_main.xml để bao gồm hai nút trong bố cục tuyến tính. |
| 6 | Không cần thay đổi bất kỳ hằng số nào trong tệp res / values / strings.xml . Android studio chăm sóc các giá trị chuỗi |
| 7 | Chạy ứng dụng để khởi chạy trình giả lập Android và xác minh kết quả của các thay đổi được thực hiện trong ứng dụng. |
Tệp này có thể bao gồm từng phương pháp vòng đời cơ bản. Chúng ta đã thêm các phương thức startService () và stopService () để bắt đầu và ngừng dịch vụ.
package com.example.tutorialspoint7.myapplication; 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 : "; /** Called when the activity is first created. */ @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)); } // Method to stop the service public void stopService(View view) { stopService(new Intent(getBaseContext(), MyService.class)); } }
Sau đây là nội dung của MyService.java . Tệp này có thể triển khai một hoặc nhiều phương thức được liên kết với Dịch vụ dựa trên các yêu cầu.
Bây giờ chúng ta sẽ chỉ thực hiện hai phương thức onStartCommand () và onDestroy ()
package com.example.tutorialspoint7.myapplication; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.support.annotation.Nullable; import android.widget.Toast; /** * Created by TutorialsPoint7 on 8/23/2016. */ public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { // Let it continue running until it is stopped. 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(); } }Sau đây sẽ là nội dung sửa đổi của tệp AndroidManifest.xml . Ở đây chúng tôi đã thêm thẻ <service ... /> để bao gồm dịch vụ của chúng tôi
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.tutorialspoint7.myapplication"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" 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>Sau đây sẽ là nội dung của tệp res / layout / activity_main.xml để bao gồm hai nút
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Example of services" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textSize="30dp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials point " android:textColor="#ff87ff09" android:textSize="30dp" android:layout_above="@+id/imageButton" android:layout_centerHorizontal="true" android:layout_marginBottom="40dp" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageButton" android:src="@drawable/abc" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:text="Start Services" android:onClick="startService" android:layout_below="@+id/imageButton" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Stop Services" android:id="@+id/button" android:onClick="stopService" android:layout_below="@+id/button2" android:layout_alignLeft="@+id/button2" android:layout_alignStart="@+id/button2" android:layout_alignRight="@+id/button2" android:layout_alignEnd="@+id/button2" /> </RelativeLayout>Hãy thử chạy Hello World đã sửa đổi của chúng ta ! ứng dụng chúng tôi vừa sửa đổi. Tôi cho rằng bạn đã tạo AVD của mình trong khi thiết lập môi trường.
Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào Chạy biểu tượng từ thanh công cụ.
Android Studio cài đặt ứng dụng trên AVD của bạn và khởi động ứng dụng và nếu mọi thứ đều ổn với thiết lập và ứng dụng của bạn, ứng dụng sẽ hiển thị cửa sổ Trình mô phỏng sau
![]() |
| ảnh minh họa |
![]() |
| ảnh minh họa |



Không có nhận xét nào:
Đăng nhận xét