2010-06-11 26 views
13

Tôi đang bắt đầu dịch vụ trong ứng dụng của mình bằng startService.Cách nhận bản sao Dịch vụ Địa phương Android

Tôi không muốn sử dụng bindService vì tôi muốn tự mình xử lý thời gian hoạt động của dịch vụ.

Làm cách nào để có thể bắt đầu phiên bản dịch vụ nếu tôi không sử dụng bindService? Tôi muốn có thể có một trình xử lý tôi đã tạo trong lớp dịch vụ để đăng thông báo từ hoạt động.

Cảm ơn.

/Henrik

Trả lời

13

Tôi không muốn sử dụng bindService như tôi muốn xử lý thời gian tuổi thọ bản thân mình.

Điều đó không có nghĩa là bạn phải tránh bindService(). Sử dụng cả hai startService()bindService(), nếu cần.

Làm cách nào tôi có thể nhận bản sao cho dịch vụ bắt đầu nếu tôi không sử dụng bindService?

Hoặc sử dụng bindService() với startService() hoặc sử dụng đơn.

+0

Bằng cách "sử dụng một singleton", bạn có nghĩa là tôi nên khai báo phương pháp của tôi tĩnh trong lớp dịch vụ? – Henrik

+0

Làm việc như một sự quyến rũ với cả bindService và startService. Cảm ơn bạn! – Henrik

+2

@Henrik: FWIW, bởi singleton, tôi có nghĩa là bạn có một tham chiếu tĩnh đến dịch vụ của bạn, đặt ở đó bằng 'onCreate()' của dịch vụ, được xóa trong 'onDestroy()' của dịch vụ. Điều đó làm giảm nguy cơ rò rỉ bộ nhớ, do đó, ràng buộc được khuyến khích bất cứ nơi nào có thể. – CommonsWare

4

Dưới đây là cách tiếp cận khác:

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

public class MyService extends Service { 
    private Binder binder; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     binder = new Binder(); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return binder; 
    } 

    public class Binder extends android.os.Binder { 
     public MyService getService() { 
      return MyService.this; 
     } 
    } 
} 

onServiceConnected(...) thể cast đối số của nó để MyService.Binder và gọi getService() trên đó. Điều này tránh rò rỉ bộ nhớ tiềm ẩn do có tham chiếu tĩnh đến dịch vụ. Tất nhiên, bạn vẫn phải đảm bảo hoạt động của bạn không được treo vào một tham chiếu.

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