具有成员arraylist的活动。 此arraylist将由活动编写并由其/ activity处理程序读取。 处理程序读取的数据有时是正确的,有时也是错误的。这是因为当处理程序正在读取时,活动写入的数据不会同步。
我注意到活动和处理程序处于不同的进程中,甚至处理程序也是由活动创建的。但是处理程序由另一个进程调用。
如何使arraylist数据同步/一致?感谢。
活动代码:
private Vector<XMPPConnectionInClientCallback> mCallbackList = new Vector<>();
public interface XMPPConnectionInClientCallback {
void connected(int data);
void logIned(int data);
void disconnected(String data);
}
public void addCallback(XMPPConnectionInClientCallback callback) {
Log.e("connectionclient", "addone");
mCallbackList.add(callback);
String strI = String.valueOf(mCallbackList.size());
Log.e("connectionclient", strI);
}
活动中的处理程序:
final Messenger mMessenger = new Messenger(new IncomingHandler());
class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
//synchronized(mCallbackList) {
//get data message from Service Process
int MSGValue = msg.what;
switch (msg.what) {
case XmppService.E_CONNECTION_MESSENGER_VALUE:
try {
//callback here
String strI = String.valueOf(mCallbackList.size());
Log.e("connectionclient size", strI);
for (int i = 0; i < mCallbackList.size(); i++) {
mCallbackList.get(i).connected(MSGValue);
}
break;
我首先调用addCallback()将一个对象添加到mCallbackList,然后一段时间后服务进程将向处理程序发送一条消息。处理程序将从mCallbackList读取对象。有时候mCallbackList有对象,有时候没有。我注意到处理程序正在服务进程中运行。而addCallback()正在主进程中运行。
答案 0 :(得分:0)
您可以尝试使用Vector而不是Arraylist。它的所有方法都是同步的,因此它是“线程安全的”。