我正在运行我的应用程序,在开发中激活StrictMode,如下所示StrictMode用于较低平台版本, 并注意到一条错误消息,我不知道该考虑什么,也无法找到任何参考.
我得到一个android.os.StrictMode$InstanceCountViolation与价值观instances和limit如
实例= 3; 极限= 2
现在我想知道:
有任何想法吗?
我正在开发一个具有较低级别活动的项目,RecordView用于显示记录详细信息,例如图像,拍摄日期和时间以及纬度/经度信息.我试图实现一个位置监听器来获取首次拍摄图像的位置(按下按钮),而不是试图操纵相机进行地理标记和访问exif数据.这种方法有效 - 我得到我的位置以正确显示和更新数据库中的记录(返回视图以后显示从头开始的位置).但是,如果我退出当前RecordView然后再输入两个(任何组合),程序将崩溃并显示错误InstanceCountViolation(下面重新打印完整错误).当我覆盖RecordView每个被调用时显示的生命周期方法时,我们发现它在被再次调用之前被销毁.也就是说,RecordView在任何给定时间似乎不存在多于一个.
所以我的问题归结为:这个错误来自何处以及如何解决?
有什么东西在撒谎?LocationListener是否位于某处并导致问题?是不是可能会提供虚假错误的东西?
此外,我应该做可怕的硬编码修复,只是RecordView允许的实例限制?或者继续寻找另一种方法(作为一个例子,我试图通过PendingIntent.getBroadcast(...)呼叫请求单次更新)?
作为参考,此错误已出现在3.1的仿真器和实际的平板电脑上(Xoom,3.1).注释掉监听器更新代码似乎可以避免崩溃(编辑2:我似乎错了).与侦听器相关的代码如下(可以updateLocation在RecordView类中的公共方法中找到).
// Listener for the update request
LocationListener locListener = new LocationListener() {
// Store the currentRecord so the listener can update it after return
Record currentRecord = record;
GeoDatabase database = data;
@Override
public void onLocationChanged(Location location) {
if (location != null) {
myLocation = location;
Log.d(TAG, "Location pulled as " + myLocation); …Run Code Online (Sandbox Code Playgroud) 当Android的StrictMode检测到泄露的对象(例如活动)违规时,如果我能够在那个时刻捕获堆转储将会很有帮助.但是,没有明显的方法来配置它来执行此操作.有没有人知道可以用来实现它的一些技巧,例如说服系统在死刑被调用之前运行一段特定代码的方法?我不认为StrictMode会抛出异常,所以我不能使用这里描述的技巧:有没有办法让Android进程在OutOfMemoryError上产生堆转储?