【发布时间】:2013-12-10 17:02:55
【问题描述】:
我能找到的所有示例 SyncService 代码似乎都没有完全同步或没有必要同步。
下面的典型代码在创建单例实例时使用静态锁。
public class SyncService extends Service {
private static final Object sSyncAdapterLock = new Object();
private static SyncAdapter sSyncAdapter = null;
@Override
public void onCreate() {
synchronized (sSyncAdapterLock) {
if (sSyncAdapter == null) {
sSyncAdapter = new SyncAdapter(getApplicationContext(), false);
}
}
}
@Override
public IBinder onBind(Intent intent) {
return sSyncAdapter.getSyncAdapterBinder();
}
}
来源:http://developer.android.com/training/sync-adapters/creating-sync-adapter.html
关于这段代码的两个奇怪的地方是:
为什么还需要锁? onCreate() 不是总是在主应用线程上调用吗?
如果 onCreate() 中需要一个锁,为什么不使用这个锁来访问 onBind() 中的实例? FindBugs 将此标记为 50% 同步。
【问题讨论】:
-
嘿,您的问题得到答案了吗?如果是,请发布它
标签: java android multithreading concurrency