我用 Handler 制作服务,我需要 Handler 来使用一些服务方法。由于 Handler 必须是static
,我可以在 Handler 中没有 Service 引用的情况下访问 Service 方法。
所以我这样做了:
private static class ServiceHandler extends Handler {
MyService service;
public ServiceHandler(MyService service) {
this.service = service;
}
@Override
public void handleMessage(Message msg) {
...
}
}
但也发现这是做这项工作的正确方法:
private static class ServiceHandler extends Handler {
private final WeakReference<MyService> mMyService;
public ServiceHandler(MyService service) {
mMyService = new WeakReference<MyService>(service);
}
@Override
public void handleMessage(Message msg) {
MyService service = mMyService.get();
...
}
}
这两种在Handler中使用Service的方式有什么区别呢?