Thursday, February 22, 2018

Service trong Android

Một Service là một thành phần mà chạy trong Background để thực hiện các hoạt động mà không cần tương tác với người dùng và nó làm việc ngay cả khi nếu ứng dụng bị hủy. Về cơ bản, một Service nhận hai thể:

 

học lập trình android ởđâu

trạng thái mô tả
Started Một Service được bắt đầu (started) khi một Component, chả hạn như activity, bắt đầu bằng việc gọi startService(). Khi đã được bắt đầu, một Service có thể chạy ngầm định trong Background, ngay cả khi thành phần mà bắt đầu nó đã bị hủy
Bound Một Service được gắn kết (bound) khi một Component kết nối tới nó bởi việc gọi bindService(). Một bound service 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 Service đó, gửi yêu cầu, nhận kết quả, và có thể thực hiện một số tiên trình khác với Interprocess Communication (IPC)
Một Service có các phương thức callback mà bạn có thể triển khai để giám sát các thay đổi trong trạng thái của Service và bạn có thể thực hành công việc trên các tuổi cụ thể. Sơ đồ bên trái minh họa vòng đời của Service khi Service được tạo với phương thức startService() và Sơ đồ bên phải minh họa vòng đời Service khi Service được tạo với bindService():

 

 
Để tạo một Service, bạn tạo một lớp Java mà kế thừa lớp cơ sở Service hoặc một trong các lớp con đang tồn tại của nó. Lớp cơ sở Service định nghĩa các phương thức callback đa dạng và các phương thức quan yếu nhất được kê dưới đây. Bạn không cần triển khai bít tất chúng. Điều quan trọng là bạn hiểu từng phương thức và cách triển khai chúng để bảo đảm vận dụng của bạn vận hành như người dùng mong chờ.

 

Callback Miêu tả
onStartCommand() Hệ thống gọi phương thức này khi thành phần khác, chẳng hạn một activity, yêu cầu rằng Service bắt đầu, bằng việc gọistartService(). Nếu bạn triển khai phương thức này, thì bạn cũng cần dừng nó khi công việc đã được thực hiện, bằng cách gọi phương thức stopSelf() hoặc stopService()
onBind() Hệ thống gọi phương thức này khi thành phần khác muốn liên kết với Service bởi gọi bindService(). Nếu bạn khai triển phương thức này, bạn phải cung cấp một giao diện mà client dùng để giao thiệp với Service đó, bằng việc trả về một đối tượng IBinder. Bạn phải luôn luôn triển khai phương thức này, nếu bạn không muốn cho phép liên kết, thì bạn nên trả về null.
onUnbind() Hệ thống gọi phương thức này khi tất tật client đã bị ngắt kết nối với một giao diện nào đó đã được ban bố bởi Service này
onRebind() Hệ thống gọi phương thức này khi client mới đã kết nối tới Service này, sau khi nó đã được thông tin trước đó rằng cả thảy đã bị ngắt kết nối trong phương thức onUnbind(Intent) của nó .
onCreate() Hệ thống gọi phương thức này khi Service là được tạo trước hết bởi dùng onStartCommand() hoặc onBind(). Lời gọi này là cấp thiết để thực hành cài đặt one-time
onDestroy() Hệ thống gọi phương thức này khi Service không còn được dùng nữa và đang bị hủy. Service của bạn nên triển khai phương thức này để xóa bất cứ Resource nào như thread, registered listener, receiver, ...

tỉ dụ sau minh họa vòng đời của mỗi phương thức của một 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, 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() 

   

tỉ dụ

Ví dụ sau sẽ đưa bạn qua các bước đơn giản để minh họa cách tạo Service riêng cho áp dụng Android của bạn. Sau đây là các bước để sửa đổi áp dụng Hello World đã tạo ở chương Ví dụ Hello World.

 

Bước mô tả
1 dùng Android StudioIDE để tạo một vận dụng Android và đặt tên nó là My Application dưới một package là com.example.My Application đã được giảng giải trong chương tỉ dụ Hello World
2 Sửa đổi MainActivity.java để thêm phương thức startService() và phương thứcstopService()
3 Tạo một MyService.java mới dưới package là com.example.My Application. File này sẽ có trình khai triển của các phương thức hệ trọng tới Android Service
4 Định nghĩa Service của bạn trong AndroidManifest.xml bởi sử dụng thẻ Một vận dụng có thể có một hoặc nhiều Service mà không có bất cứ hạn chế nào.
5 Sửa đổi nội dung mặc định của res/layout/activity_main.xml file để bao hai button trong linear layout
6 Không cần thiết thay đổi bất cứ hằng nào trong res/values/strings.xml file. Android Studio sẽ để ý các giá trị chuỗi đó
7 Chạy áp dụng để chạy Android Emulator và rà kết quả các thay đổi đã thực hiện trong áp dụng này
Sau đây là nội dung của Main Activity file đã được 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 đây là nội dung của src/com.example.My Application/MyService.java. File này có thể có trình triển khai của một hoặc nhiều phương thức được gắn kết với Service tùy theo đề nghị. hiện nay, chúng ta đang triển khai chỉ hai phương thức là onStartCommand() và onDestroy() −

 

package com.example.My Application;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class MyService extends Service 
   
   @Override
   public IBinder onBind(Intent arg0) 
      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();
   
 
Còn đây là nội dung đã được sửa đổi của AndroidManifest.xml Ở đây, chúng ta đã thêm thẻ để bao Service của chúng ta:

   
   
   
   
       
       
       
          
             
             
          
       
       
       
       
       
   

 

Đây sẽ là nội dung của res/layout/activity_main.xml file để bao hai nút:

 


   
   
      
      

    

 

Và nội dung của res/values/strings.xml để định nghĩa hai hằng mới là:

 


    My Application
    Settings
    MainActivity
hiện thời, chạy áp dụng Hello World!đã sửa trên. giả như bạn đã tạo AVD trong khi cài đặt. Để chạy áp dụng từ Android Studio, mở activity file của project và nhấn vào biểu tượng Run  từ thanh phương tiện. Android Studio đặt áp dụng trên AVD và bắt đầu nó. Nếu mọi thứ là ổn, nó sẽ hiển thị cửa sổ Emulator sau: −
Service trong Android
Để bắt đầu dịch vụ, bạn nhấn nút Start Service , việc này sẽ bắt đầu Service và theo như lập trình trong phương thức onStartCommand() một thông điệp Service Started sẽ xuất hiện ở cuối hình minh họa, như sau:

 

Service trong Android

 

Để dừng Service, bạn có thể nhấn nút Stop Service.

No comments:

Post a Comment