如何获取Android Local Service实例

Hen*_*rik 16 service android

我正在使用startService在我的应用程序中启动服务.

我不想使用bindService,因为我想自己处理服务的生命周期.

如果我不使用bindService,如何才能获得启动服务的实例?我希望能够获得我在服务类中创建的处理程序来发布来自活动的消息.

谢谢.

/亨利克

Com*_*are 16

我不想使用bindService,因为我想自己处理服务的生命周期.

这并不意味着你必须避免bindService().同时使用startService()和bindService()如果需要的话.

如果我不使用bindService,如何才能获得启动服务的实例?

或者使用bindService()与startService(),或使用一个单例.

  • @Henrik:FWIW,by singleton,我的意思是你有一个静态引用你的服务,由服务的`onCreate()`放在那里,在服务的`onDestroy()`中删除.这会导致内存泄漏的风险,因此建议尽可能绑定. (4认同)

Bro*_*ins 5

这是另一种方法:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

onServiceConnected(...)可以将其参数强制转换为MyService.Binder并调用getService()它。这样可以避免潜在的内存泄漏,因为它无法静态引用服务。当然,您仍然必须确保您的活动没有挂在参考上。