Наследование Activity. Передача данных из Thread в Activity через Message
Есть класс, от которого будут наследоваться другие классы:
public class ActivityUART extends Activity {
protected Handler handlerUART;
private byte[] cmdBuffer;
private class ReadThread extends Thread {
@Override
public void run() {
super.run();
cmdBuffer = new byte[13];
while(!isInterrupted()) {
// cmdBuffer[cntCmdByte] - заполняем буфер
Message msg = null;
msg = handlerUART.obtainMessage(cmdBuffer.length, cmdBuffer);
handlerUART.sendMessage(msg);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
super.onResume();
mReadThread = new ReadThread();
mReadThread.start();
}
@Override
protected void onPause() {
if (mReadThread != null)
mReadThread.interrupt();
super.onPause();
}
Первый класс:
public class MainActivity extends ActivityUART {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
handlerUART = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
byte[] buffer = new byte[msg.what];
buffer = (byte[]) msg.obj;
if (buffer[4] == 5) {
startActivity(new Intent(MainActivity.this, timeActivity.class));
}
};
super.onResume();
@Override
protected void onPause() {
super.onPause();
}
Второй класс:
public class timeActivity extends ActivityUART {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newactivity);
}
@Override
protected void onResume() {
handlerUART = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
byte[] buffer = new byte[msg.what];
buffer = (byte[]) msg.obj;
if (buffer[4] == 5) {
Log.d(TAG, "execute key OK");
}
};
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
А теперь вопрос:
При первой передаче данных от ReadThread
к MainActivity
все происходит, как и должно быть, запускается timeActivity
. Но при следующей передаче данных уже от ReadThread
к timeActivity
не происходит Log.d(TAG, "execute key OK");
, а вместо этого еще раз запускается timeActivity
. Если еще раз передавать данные от ReadThread
к timeActivity
, то будет выполнятся строка Log.d(TAG, "execute key OK");
. Но если аппаратной кнопкой андроида "назад" закрыть созданные timeActivity
, вернуться к MainActivity
и передать данные опять от ReadThread
к MainActivity
, то по-прежнему будет выполняться строка Log.d(TAG, "execute key OK");
вместо строки startActivity(new Intent(MainActivity.this, timeActivity.class));
.
Почему так происходит? И как мне обратится именно к обработчику сообщений текущей Activity?