Fatal signal 11
错误
多个AsyncTask
、Loader
同时执行的时候,偶尔会闪退。 错误信息大致如下:12@@@ ABORTING: INVALID HEAP ADDRESS IN dlfreeFatal signal 11 (SIGSEGV) 0xdeadbaad (code=1)
原因
Stackoverflow上有一个类型的问题,但是它的原因是在多个线程中调用了BluetoothSocket#close
方法。回到自己的问题上来,我这边发生的问题也极有可能在网络操作方法,而不是异步任务本身。由于我的项目使用了spring android
来对远程API进行请求操作的,所以最终问题定位到RestTempalte
上。起初怀疑是使用的网络模块的问题,spring android
可以使用apache httpclient
、okhttp
等作为http请求模块,但是逐一尝试还是解决不了问题。那问题只能出在RestTempalte
本身了。Spring论坛上找到一个类似的问题,解决的办法是在RestTemplate
初始化的代码上加上同步块,但是更为根本的原因还是不太清楚。
解决
我的项目是使用Roboguice来注入各种service供异步任务调用的,各个service对象注入的时候都会初始化RestTempalte
。但是RestTempalte
本身是线程安全的,所以所有的service使用同一个RestTempalte
应该是没问题的。最终的修改就是service不再初始化RestTempalte
,还是依赖注入一个容器中单例的RestTempalte
。