我想保持我的后台线程和我的观点完全分离,因此我使用线程和总线系统(实际上我使用的是一个职业经理,来自这里:https://github.com/path/android-priority-jobqueue)。为了获得更好的用户体验,我将已计算或加载的数据缓存在LruCache
中。我已经编写了一个包装器来保证线程安全。必须在后台完成的每项工作都由标签识别。
我在自己的单例类中跟踪工作线程。
我的主题如下:
当片段恢复时,我会使用以下系统:
我认为,这很容易出现一种竞争条件:
=>片段不会收到它的数据
我该如何解决这个问题?如果我考虑两个独立的线程,这种竞争条件是可能的。在andoroid上,线程将在主线程上发布ALWAYS,这会影响我的问题吗?我实际上并不确定......
这是我的主要线程otto总线的完整性:
// defined in my application
private static final MainThreadBus BUS = new MainThreadBus(new Bus(ThreadEnforcer.ANY));
// the bus class
public class MainThreadBus extends Bus
{
private final Bus mBus;
private final Handler mHandler = new Handler(Looper.getMainLooper());
public MainThreadBus(final Bus bus)
{
if (bus == null)
throw new NullPointerException("ERROR: bus == null");
mBus = bus;
}
@Override
public void register(Object obj)
{
mBus.register(obj);
}
@Override
public void unregister(Object obj)
{
mBus.unregister(obj);
}
@Override
public void post(final Object event)
{
if (Looper.myLooper() == Looper.getMainLooper())
{
mBus.post(event);
}
else
{
mHandler.post(new Runnable()
{
@Override
public void run()
{
mBus.post(event);
}
});
}
}
}