Активность, которая имеет членский архаист. Этот arraylist будет записан по активности и прочитан обработчиком/обработчиком. Данные, прочитанные обработчиком, иногда правильные, а иногда и неправильные. Это связано с тем, что данные, записанные активностью, не синхронизируются при чтении обработчиком.Обработчик Android читает данные пользовательского интерфейса/основной нити
Я заметил, что активность и обработчик находятся в другом процессе, даже обработчик создается действием. Но обработчик вызван другим процессом.
Как сделать данные 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' вызывать' Log.d' с 'Thread.currentThread', что вы видите? что-то вроде 'Thread [main, 5, main]'? – pskink
Я бы предположил, что это ошибка системы !!! Наконец, я перехожу к другому решению. Я проверил несколько случаев. Все эти случаи приведут к несогласованности данных, если обработчик находится в другом Процессе. Если в том же процессе (другой поток), проблем нет. – xhsoldier