http://vietjack.com/android/index.jsp Copyright © vietjack.com Service Android Một Service thành phần mà chạy Background để thực hoạt động mà khơng cần tương tác với người dùng làm việc ứng dụng bị hủy Về bản, Service nhận hai trạng thái: − Trạng thái Miêu tả Started Một Service bắt đầu (started) Component, chẳng hạn activity, bắt đầu việc gọi startService() Khi bắt đầu, Service chạy ngầm định Background, thành phần mà bắt đầu bị hủy Bound Một Service gắn kết (bound) Component kết nối tới việc gọi bindService() Một bound service cung cấp giao diện ClientServer cho phép thành phần để tương tác với Service đó, gửi yêu cầu, nhận kết quả, thực số tiên trình khác với Interprocess Communication (IPC) Một Service có phương thức callback mà bạn triển khai để giám sát thay đổi trạng thái Service bạn thực cơng việc giai đoạn cụ thể Sơ đồ bên trái minh họa vòng đời Service Service tạo với phương thức startService() sơ đồ bên phải minh họa vòng đời Service Service tạo với bindService(): http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/android/index.jsp Copyright © vietjack.com Để tạo Service, bạn tạo lớp Java mà kế thừa lớp sở Service lớp tồn Lớp sở Service định nghĩa phương thức callback đa dạng phương thức quan trọng liệt kê Bạn không cần triển khai toàn chúng Điều quan trọng bạn hiểu phương thức cách triển khai chúng để đảm bảo ứng dụng bạn vận hành người dùng mong đợi http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/android/index.jsp Copyright © vietjack.com Callback Miêu tả onStartCommand() Hệ thống gọi phương thức thành phần khác, chẳng hạn activity, yêu cầu Service bắt đầu, việc gọi startService() Nếu bạn triển khai phương thức này, bạn cần dừng cơng việc thực hiện, cách gọi phương thức stopSelf()hoặc stopService() onBind() Hệ thống gọi phương thức thành phần khác muốn liên kết với Service gọi bindService() Nếu bạn triển khai phương thức này, bạn phải cung cấp giao diện mà client sử dụng để giao tiếp với Service đó, việc trả đối tượng IBinder Bạn phải luôn triển khai phương thức này, bạn không muốn cho phép liên kết, bạn nên trả null onUnbind() Hệ thống gọi phương thức tất client bị ngắt kết nối với giao diện cơng bố Service onRebind() Hệ thống gọi phương thức client kết nối tới Service này, sau thơng báo trước tất bị ngắt kết nối phương thức onUnbind(Intent) onCreate() Hệ thống gọi phương thức Service tạo sử dụng onStartCommand() onBind() Lời gọi cần thiết để thực cài đặt one-time onDestroy() Hệ thống gọi phương thức Service khơng sử dụng bị hủy Service bạn nên triển khai phương thức để xóa Resource thread, registered listener, receiver, Ví dụ sau minh họa vòng đời phương thức Service: − 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, http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/android/index.jsp Copyright © vietjack.com 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() { } } Ví dụ Ví dụ sau đưa bạn qua bước đơn giản để minh họa cách tạo Service riêng cho ứng dụng Android bạn Sau bước để sửa đổi ứng dụng Hello World tạo chương Ví dụ Hello World Bước Miêu tả Sử dụng Android StudioIDE để tạo ứng dụng Android đặt tên My Application package com.example.My Application giải thích chương Ví dụ Hello World Sửa đổi MainActivity.java để thêm phương thức startService() phương thứcstopService() Tạo MyService.java package com.example.My Application File có trình triển khai phương thức liên quan tới Android Service Định nghĩa Service bạn AndroidManifest.xml sử dụng thẻ Một ứng dụng có nhiều Service mà khơng có hạn chế Sửa đổi nội dung mặc định res/layout/activity_main.xml file để bao hai button linear layout Không cần thiết thay đổi res/values/strings.xml file Android Studio để ý giá trị chuỗi Chạy ứng dụng để chạy Android Emulator kiểm tra kết thay đổi thực ứng dụng http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/android/index.jsp Copyright © vietjack.com Sau nội dung Main Activity file sửa đổi: src/com.example.My Application/MainActivity.java We have added startService() and stopService() methods to start and stop the service package com.example.My Application; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.content.Intent; import android.view.View; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } // Method to start the service 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 nội dung src/com.example.My Application/MyService.java File có trình triển khai nhiều phương thức gắn kết với Service tùy theo yêu cầu Bây giờ, triển khai hai phương thức onStartCommand() vàonDestroy() − package com.example.My Application; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.widget.Toast; @Override @Override public class MyService extends Service { public IBinder onBind(Intent arg0) { return null; 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(); } } Còn nội dung sửa đổi AndroidManifest.xml Ở đây, thêm thẻ để bao Service chúng ta: http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/android/index.jsp Copyright © vietjack.com Đây nội dung res/layout/activity_main.xml file để bao hai nút: Và nội dung res/values/strings.xml để định nghĩa hai là: My Application name="menu_settings">Settings