2011-10-25 52 views
5

我真的不實例化一個AndroidHttpClient任何地方在我的代碼,但我開始一個識別器的意圖,這在某些時候產生這種異常,當我的應用程序運行時:泄漏發現: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)

但我怎麼知道哪一個?

回答

6

假設錯誤是不是在Android的代碼,但在我的

泄漏發生在com.google.android.voicesearch,這是不是你的代碼。

如果您可以創建一個小型示例項目來演示此泄漏情況,我們可以向Google發出問題並希望他們解決此問題。

1

爲什麼你認爲它不是在Android? SpeechRecognizerRecognitionListener在ASOP中,所以你可以檢查(它不存在)。最有可能的SpeechServiceHttpClient在內部使用AndroidHttpClient。你可以做的事情不多,但檢查你是否正在調用你正在使用的框架類的所有終結器方法,如果有的話(close(),shutdown()等)。

+0

謝謝Nikolay Elenkov和@CommonsWare。 – srf