1. 程式人生 > >Android文字轉語音(TextToSpeech)記憶體洩漏的問題

Android文字轉語音(TextToSpeech)記憶體洩漏的問題

近期在專案中使用文字轉語音遇到一個小問題。專案中是在service中持有一個 TextToSpeech物件,通過messenger與service通訊進行文字轉語音的操作。但是每次推出應用不久就出出現記憶體洩漏的問題,如下:

Service com.lucis.workout.service.PrivateSoundService has leaked ServiceConnection [email protected] that was originally bound here
                                                                 android.app.ServiceConnectionLeaked: Service com.lucis.workout.service.PrivateSoundService has leaked ServiceConnection 
[email protected]
that was originally bound here at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:1344) at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:1239) at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1488) at android.app.ContextImpl.bindService(ContextImpl.java:1460) at android.content.ContextWrapper.bindService(ContextWrapper.java:646) at android.speech.tts.TextToSpeech.connectToEngine(TextToSpeech.java:810) at android.speech.tts.TextToSpeech.initTts(TextToSpeech.java:780) at android.speech.tts.TextToSpeech.<init>(TextToSpeech.java:733) at android.speech.tts.TextToSpeech.<init>(TextToSpeech.java:712) at android.speech.tts.TextToSpeech.<init>(TextToSpeech.java:696) at com.lucis.workout.service.PrivateSoundService.onCreate(PrivateSoundService.java:99) at android.app.ActivityThread.handleCreateService(ActivityThread.java:3240) at android.app.ActivityThread.-wrap5(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1624) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:163) at android.app.ActivityThread.main(ActivityThread.java:6342) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)

在確保自己每次新建TextToSpeech物件之後都有呼叫對應的shutDown方法之後,依然還是會報錯,而且報錯之後語音播報功能就不好用了,必須殺掉程序才能恢復。

嘗試了一些可能的原因,最後發現自己每次新建TextToSpeech時Context物件都是直接用的this,改成getapplicationContext之後就不報錯了。

雖然問題解決了,但是不知道原因啊尷尬,可能是和service的生命週期有關,以後再研究吧

相關推薦

Android文字語音TextToSpeech記憶體洩漏的問題

近期在專案中使用文字轉語音遇到一個小問題。專案中是在service中持有一個 TextToSpeech物件,通過messenger與service通訊進行文字轉語音的操作。但是每次推出應用不久就出出現記憶體洩漏的問題,如下:Service com.lucis.workout.

2018 Android 文字語音(中文) TextToSpeech+科大訊飛語音引擎3.0

最近專案中需要用到文字轉語音。 本來是想使用朗讀女生成的聲音檔案放到專案資源中進行播放。 但是產品要求改成動態的。於是就用了Google為我們封裝好的類TTS,即[TextToSpeech]:大家可以看下詳細文件。 程式碼其實不多,但是寫完之後測試就有問題

Android文字語音引擎TTS使用

ner amp ucc count google 簡單 com 播報 androi 百度網盤下載地址 密碼:3si0 簡單比較 (應用包名) * com.svox.pico 系統自帶不支持中文語音 * com.svox.classic 搜svox

Android文字語音引擎TTS簡單比較及下載

目前國內Android系統自帶語音引擎包括華為小米等居然都是不支援中文語音功能,以下是在網上找到的谷歌、科大訊飛和百度的純語音引擎apk,沒有啟動介面,安裝後在設定中能找到。不知為什麼這些引擎在官網上都是找不到的。 簡單比較 (應用包名) * c

android必備記錄筆記記憶體洩露和各種效能優化

該篇筆記來自於平時學習時,對各種學習資源的整合,如有冒犯敬請諒解,整理的不好,還望海涵指出錯誤 一、記憶體洩露 針對記憶體洩露我認為要知道下面三點: 第一:要弄清楚記憶體洩露與記憶體溢位的區別 第二:要弄清楚常規的記憶體分析方法,重點掌握Leakcanary的使用和原

Android Studio 接入 訊飛 語音合成文字語音

1.下載相應的SDK(參考我上一篇文章:https://mp.csdn.net/postedit/83743563) 2.佈置資源 . 3.新增許可權 :在Application的根目錄下,為了可以訪問手機的一些功能 <!--連線網路許可權,用於執行雲端語音能力 -->

AWS機器學習初探2文字翻譯Translate、文字語音Polly、語音文字Transcribe

這幾個服務的功能和使用都很直接和簡單,因此放在一篇文章中介紹。 1. 文字翻譯服務 Translate 1.1 功能介紹 AWS Translate 服務是一種AWS 機器學習應用服務,它利用高階機器學習技術來進行文字翻譯。它的使用非常簡單,只需要提供輸入文字,該服務就給出輸出文字。 輸入

7 個開源的TTS文字語音系統推薦

前言:TTS在電視產品的應用,能夠幫助對電視機介面無法採用視覺化標準訪問的盲人和弱視的人,在歐洲在美國已經開始制訂了規範的實現標準,和實施的規章制度。 Ref: http://www.iteye.com/news/23832 TTS(Text To Speec

訊飛語音整合語音文字文字語音

語音聽寫SDK適配安卓6.0需要手動申請許可權 關於語音聽寫SDK的開發,參考科大訊飛開放平臺官網為準 在百度搜索訊飛科技開放平臺,自己註冊賬號 自己建立一個新應用 在控制檯介面建立完應用,然後選擇SDK下載 選擇需要的SDK進行下載(這裡我們選

C++語音識別介面快速入門Microsoft Speech SDK——文字語音

C++語音識別介面快速入門(Microsoft Speech SDK) 尤其注意其中的寬字串轉化 #include <iostream> #include <sapi.h> //匯入語音標頭檔案 #include <string

使用TextToSpeech實現文字音訊自動朗讀

主要方法 setLanguage:設定語言的型別 speak:傳入文字播放聲音 synthesizeToFile:傳入文字儲存為音訊 shutdown:釋放TextToSpeech資源 package prictise.lxm.prictise; import andro

Android百度語音整合——文字語音

       專案涉及文字轉語音的需求,用Android原生提供的TTS生成的語音太單調,機器聲音太明顯,故尋求第三方更好的支援,用科大訊飛的語音包收費,百度語音免費而且不限制呼叫次數,主頁鮮明說永久免費的智慧語音開放平臺,故使用百度語音來支援。 &nbs

android記錄筆記記憶體洩露和各種效能優化

該篇筆記來自於平時學習時,對各種學習資源的整合,如有冒犯敬請諒解,整理的不好,還望指出錯誤,主要用於查詢與記錄 一、記憶體洩露 針對記憶體洩露我認為要知道下面三點: 第一:要弄清楚記憶體洩露與記憶體溢位的區別 第二:要弄清楚常規的記憶體分析方法,重點掌握Leakcanary的使用

文字語音 兩種方法:TextToSpeech、科大訊飛

TextToSpeech核心程式碼: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

Android 文字自動滾動跑馬燈效果的兩種實現方法[特別好使]

    public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) {         super(context, attrs, defStyle);         initView();     }      

Android 文字自動滾動跑馬燈效果的兩種實現方法

    public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) {         super(context, attrs, defStyle);         initView();     }      

Android效能優化記憶體洩露優化靜態變數、單例模式、屬性動畫

記憶體洩露優化分為兩個方面,一方面是在開發過程中避免寫出有記憶體洩露的程式碼,另一方面是通過一些分析工具比如 MAT來找出潛在的記憶體洩露繼而解決。 一、靜態變數導致記憶體洩露。一般情況下靜態變數引用

Android 科大訊飛語音整合,文字語音

前言: 記錄一下科大訊飛的文字轉語音功能的sdk的整合過程,希望能夠幫助到大家。 1. 登入官網,應用註冊。 訊飛開放平臺,進行簡單的開發者註冊。進入個人中心,註冊應用。 註冊完成後,我們可以看到自己的appid。選擇自己要開通的功能,然

: Android上ffmpeg移植4-終結篇

今天終於在模擬器上面可以看到視訊了,雖然隨機性會有一些問題,但總體來說,效果還可以測試了avi和flv檔案,播放的都比較好,因為是模擬器,我設定的輸出格式是RGB565,這樣看起來可能色彩不是很好。上層的呼叫完全是標準的java介面,應用程式是參考一本資料書上面的,程式碼如下

Android下音訊進行

一. 音訊的簡介 先從音訊壓縮的原理講起, 人的聽力範圍是20hz--20khz, 而根據奈奎斯特定理, 要想不產生低頻失真,則取樣頻率至少是錄製的最高頻率的兩倍。 所以CD音質的取樣頻率是4410