我的应用程序对象出现问题。我目前正在使用服务来模拟来自电子游戏板的传入数据。该数据表示为2D布尔数组。 Service每五秒钟使用一个Application Object方法来更新数组(setDetectionMap())。我的主Activity中的一个Thread正在使用另一个方法(getDetectionMap())读取该数组。经过一些调试后,我几乎肯定主要的Activity没有看到变化。这是我的应用程序对象的代码:
public class ChessApplication extends Application{
private static ChessApplication singleton;
private boolean[][] detectionMap;
public static ChessApplication getInstance(){
return singleton;
}
@Override
public void onCreate() {
super.onCreate();
singleton=this;
detectionMap=new boolean[8][8];
}
public boolean[][] getDetectionMap(){
return detectionMap;
}
public void setDetectionMap(boolean[][] newMap){
detectionMap=newMap;
Log.d("Chess Application","Board Changed");
}
}
我已经检查了我的清单,我已经重写了我的对象声明十几次了,我添加了LogCat标签以确保代码在我认为它应该执行时执行,我甚至实现了所谓的冗余单例代码。可能导致这种情况的任何想法?顺便说一句,任何人都可以告诉我如何在活动运行时查看变量状态?提前谢谢。
答案 0 :(得分:0)
您的Activity是否在更新发生后调用getDetectionMap()来获取新地图?
因为否则,它持有对旧boolean [] []数组的引用,而setDetectionMap(...)实际上并没有更新当前数据结构,它只是更新“detectionMap”变量以指向a不同的。因此,在下次调用getDetectionMap之前,您的主要活动将不会知道交换。
轻松修复:在setDetectionMap中,手动将newMap中的值复制到detectionMap中。或者,更新活动的参考,以便查看正确的地图。
另一个与原始问题完全无关的观察结果:在Android开发期间覆盖应用程序是非常不寻常的,并且通常被认为是“代码味道”,除非您有真正这样做的充分理由。在这种情况下,我想你可以在服务和Activity之间进行交流,但是你创建了一个中间人,而不是完全必要的。 Here's a useful SO thread关于如何直接在两者之间进行沟通:)