2010-01-08 36 views
13

Tôi có dịch vụ nền đang chạy và ứng dụng khách tương tác với dịch vụ.Dịch vụ gọi lại cho hoạt động trong android

Khi khách hàng yêu cầu một số thao tác, dịch vụ thực hiện nó và nó sẽ gửi kết quả trở lại hoạt động (máy khách).

Tôi biết cách gọi các phương thức dịch vụ trong hoạt động và sử dụng gọi lại, chúng tôi có thể đạt được những gì tôi muốn làm. Nhưng tôi không thể hiểu được cơ chế gọi lại và mã ví dụ được cung cấp trong bản demo Api (remoteservice).

Ai đó có thể giải thích cách hoạt động của dịch vụ gọi lại này; hoặc bất kỳ thứ gì có thể đạt được bằng cách sử dụng cơ chế đơn giản hơn.

Trả lời

5

Đây là luồng
Tạo ý định gọi dịch vụ. Bạn có thể startService() hoặc BindService() với BIND_AUTO_CREATE

Khi dịch vụ trái phiếu, nó sẽ tạo ra một đường hầm để nói chuyện với nó cho khách hàng đó là IBinder Interface. Này được sử dụng bởi thực hiện AIDL Giao diện của bạn và trả lại IBinder trong

private final MyServiceInterface.Stub mBinder = new MyServiceInterface.Stub() { 
    public int getNumber() { 
     return new Random().nextInt(100); 
    } 
}; 

public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "Service OnBind()", Toast.LENGTH_LONG).show(); 
    return mBinder; 
} 

Một khi nó trả về mBinder, ServiceConnection mà bạn đã tạo trong các khách hàng sẽ được gọi trở lại và bạn sẽ nhận được giao diện dịch vụ bằng cách sử dụng này

  mConnection = new ServiceConnection() { 

     public void onServiceDisconnected(ComponentName name) { 
      // TODO Auto-generated method stub 

     } 

     public void onServiceConnected(ComponentName name, IBinder service) { 
      // TODO Auto-generated method stub 

      mService = MyServiceInterface.Stub.asInterface(service); 


    }; 

Bây giờ bạn có giao diện mService để gọi và truy xuất bất kỳ dịch vụ nào từ đó

+3

cách gọi lại từ dịch vụ đến hoạt động? –

Các vấn đề liên quan