0

我刚刚继承了一个非常大的代码库,可能包含大约 100 个活动。过去的开发人员似乎不明白如何仅在 UI 线程上更新适配器数据并记住通知数据集已更改。在错误意识中,我有很多堆栈跟踪,例如指出它导致崩溃。

问题是堆栈跟踪是所有操作系统级别的,实际上并没有指出导致问题的原因。是否有任何系统的方法可以找到任何人都知道的这些问题?我知道我可以通过手动检查整个代码库中的所有适配器使用情况来修复它们,但这并不是真正有效地利用时间,我想修复它。

java.lang.IllegalStateException:适配器的内容已更改,但 ListView 没有收到通知。确保适配器的内容不是从后台线程修改的,而只是从 UI 线程修改的。[在 ListView(16908298, class android.widget.ListView) with Adapter(class android.widget.HeaderViewListAdapter)]

4

2 回答 2

1

你用的是什么IDE?您可以将代码加载到与 ADT 捆绑在一起的 Eclipse 等 IDE 中。在那里您可以找到特定类的参考资料(快捷方式取决于您的操作系统)。对所有适配器或任何其他相关代码执行此操作。这也适用于编译的类文件。

在此处输入图像描述

于 2013-05-24T14:03:33.667 回答
1

这是一个想法:

  1. 获取对应用程序主线程的引用:

    Thread mainThread = Looper.getMainLooper().getThread();
    
  2. 在您对代码中的适配器进行每个方法调用之前,请检查您当前是否正在应用程序的主线程上执行(例如,通过测试相等性):

    if (!mainThread.equals(Thread.currentThread())) {
        // Then throw a runtime exception or log an error to indicate
        // that the code is not thread safe.
    }
    
于 2013-05-24T16:43:52.303 回答