泄漏发现:AndroidHttpClient已创建且从未关闭

时间:2011-10-25 14:42:35

标签: android httpclient speech-recognition

我没有在我的代码中的任何地方实例化AndroidHttpClient,但我确实启动了识别器意图,在我的应用程序运行时会产生此异常:

Leak found
java.lang.IllegalStateException: AndroidHttpClient created and never closed
    at android.net.http.AndroidHttpClient.<init>(AndroidHttpClient.java:152)
    at android.net.http.AndroidHttpClient.newInstance(AndroidHttpClient.java:138)
    at com.google.android.voicesearch.speechservice.SpeechServiceHttpClient.<init>(SpeechServiceHttpClient.java:59)
    at com.google.android.voicesearch.speechservice.ServerConnectorImpl.<init>(ServerConnectorImpl.java:85)
    at com.google.android.voicesearch.VoiceSearchContainerImpl.createRecognitionController(VoiceSearchContainerImpl.java:83)
    at com.google.android.voicesearch.GoogleRecognitionService.onCreate(GoogleRecognitionService.java:65)
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2066)
    at android.app.ActivityThread.access$2500(ActivityThread.java:123)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3835)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
    at dalvik.system.NativeStart.main(Native Method)

假设该错误不在Android的代码中,但在我的代码中,这个泄露的资源可能只在下列之一中创建:

  1. SpeechRecognizer.createSpeechRecognizer()
  2. new RecognitionListener()
  3. new Intent(SpeechRecognizer.RESULTS_RECOGNITION)
  4. SpeechRecognizer.startListening(recognizerIntent)
  5. 但我怎么知道哪一个?

2 个答案:

答案 0 :(得分:6)

  

假设该错误不在Android的代码中,而在我的

泄漏位于com.google.android.voicesearch,这不是您的代码。

如果您可以创建一个演示此泄漏的小型示例项目,我们可以向Google提出问题并希望他们能够解决此问题。

答案 1 :(得分:1)

为什么你认为它不在Android中? SpeechRecognizerRecognitionListener在ASOP中,因此您可以检查(它不在那里)。最有可能SpeechServiceHttpClient在内部使用AndroidHttpClient。你可以做的事情并不多,但是检查你正在调用你正在使用的框架类的所有终结器方法,如果有的话(close(),shutdown()等)。