具有成員數組列表的活動。 此數組列表將按活動編寫並由其活動處理程序讀取。 處理程序讀取的數據有時會正確,有時會錯誤。這是因爲當處理程序正在讀取時,活動寫入的數據未同步。Android處理程序讀取UI /主線程數據
我注意到活動和處理程序在不同的過程中,即使處理程序是由活動創建的。但處理程序被另一個進程調用。
如何使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()在主進程中運行。
請顯示一些關於數組列表讀/寫的代碼。 'handleMessage'中的 –
用'Thread.currentThread'調用'Log.d',你看到了什麼?有點像'Thread [main,5,main]'? – pskink
我想這是一個系統錯誤!最後,我改變爲另一種解決方案。我測試了幾個案例。如果處理程序在另一個進程中,所有這些情況都會導致數據不一致。如果在相同的過程中(不同的線程),沒有問題。 – xhsoldier