正如有关bound services的文档中所述,mBound
布尔值用于了解服务是否绑定在活动中。以下是文档中给出的代码示例的摘录:
public class BindingActivity extends Activity {
LocalService mService;
boolean mBound = false;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
mBound = true;
}
}
为什么要使用其他成员,而不是将mService
设置为null
,如果它没有绑定?这似乎是多余的,可能error-prone。
答案 0 :(得分:1)
您无需在活动中添加其他标记。
附加标志会增加数据一致性和原子性的风险,例如:
数据一致性:有人修改此代码可能会因使用mBound
或mService != null
而感到困惑,就像您一样。他们可能会担心此问题并添加assert(mBound == mService != null);
支票。
原子性:在严格的线程安全条件下,onServiceConnected
可能会在mBound = true;
之前被阻止,而在其他线程中,mService
和{{ 1}}可能在州内发生冲突。
复杂性:如果编辑代码的其他人错误地将mBound
修改为其他状态会怎样?
希望这可以提供帮助。