好的,我认为您应该重构一下。 的确,您创建了2个不同的graphactivity实例。 您不需要第一个。
您可以对侦听器使用单例,如下所示:
1使BLEConnection为单例:
public class BLEConnection {
private static BLEConnection singletonInstance = new BLEConnection();
private BLEConnection() {} //constructor cannot be called from outside
public static BLEConnection getInstance() {
return singletonInstance;
}
(... your Stuff here)
}
现在,BLEConnection将保留在内存中,如果您调用,则始终获得相同的实例
BLEConnection bleconnection = BLEConnection.getInstance();
从应用程序中的任何位置。
2创建一个侦听器界面:
public interface BLEConnectionListener {
void statusUpdated(String newStatus);
//you can write more functions here. Every activity from step 3 has to implement them
}
3使您的活动实现界面:
public class MainActivity implements BLEConnectionListener {
public void statusUpdated(String newStatus) {
//do your thread thing here if you want to...
}
}
public class GraphActivity implements BLEConnectionListener {
public void statusUpdated(String newStatus) {
//do graph stuff here
}
}
4通知BLEConnection有关接口的信息:
onResume / onPause中的MainActivity和GraphActivity:
public void onResume() {
// bla
BLEConnection bleConnection = BLEConnection.getInstance();
bleConnection.addListener(this);
}
public void onPause() {
// bla
BLEConnection bleConnection = BLEConnection.getInstance();
bleConnection.removeListener(this);
}
更新BLEConnection
public class BLEConnection {
private ArrayList listeners = new ArrayList();
public void addListener(BLEConnectionListener listener) {
if (!listeners.contains(listener)) {
listeners.add(listener);
}
}
public void removeListener(BLEConnectionListener listener) {
if (listeners.contains(listener)) {
listeners.remove(listener);
}
}
public void forwardStatusUpdate(String statusString) {
for (BLEConnectionListener listener: listeners) {
listener.statusUpdated(statusString);
}
}
}
我希望这是可以理解的。 在BLEConnection中,您现在可以调用
forwardStatusUpdate("Connected");
通知所有监听者(=活动)状态。