我有一个Android应用程序,我从中收到BLE数据(通过通知每62毫秒)。该应用程序可以通过BufferedWriter将数据保存到文件中。在结束大量数据的保存后,我看到如下错误:GKI_exception超出缓冲区https://code.google.com/p/android/issues/detail?id=65455(除了我的代码不扫描但接收通知)。我没有看到这个错误的100skb保存,但我看到它在logMB上保存1-2MB,并且在> 5-6MB节省我需要重启Nexus 7(应用程序和BLE变得完全反应迟钝)。我在保存结束时在BufferedWriter上调用close()。我该如何解决这个问题?
答案 0 :(得分:1)
问题可能与线程有关。您需要确保“保存”操作(将文件数据写入磁盘...需要很长时间的操作)不会发生在可能阻止您的BLE通知或相关回调的同一线程上下文中。如果阻止保持BLE回调方法返回的线程,您将看到蓝牙堆栈变得饥饿,这就是回调通常意味着什么。
最简单的方法是始终确保在新的后台线程中编写文件数据(例如AsyncTask
,Thread
或IntentService
),确保无论使用什么线程你来自闪存的长写不会阻止当前的上下文。