2016-11-07 35 views
3

確定這是一個奇怪的問題。Java RandomAccessFile在附加堆棧跟蹤中獲取資源,但從未發佈

我有一個Android應用程序,它保存用戶在鍵盤上鍵入的所有內容的緩衝區(buffered.log)。除了在客戶端將應用程序安裝在他們以前安裝它的某些手機上的奇怪情況之外,一切都可以正常工作。

的應用程序,然後拋出這個錯誤:

03 20:20:34.678 22741-22749/com.menny.android.anysoftkeyboard E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks. 
                      java.lang.Throwable: Explicit termination method 'close' not called 
at dalvik.system.CloseGuard.open(CloseGuard.java:180) 
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:127) 
at com.radicalninja.logger.FlushableCipherOutputStream.<init>(FlushableCipherOutputStream.java:50) 
at com.radicalninja.logger.CipherUtils.flushableEncryptedBufferedWriter(CipherUtils.java:31) 
at com.radicalninja.logger.FileWriter.openFileWriter(FileWriter.java:41) 
at com.radicalninja.logger.FileWriter.<init>(FileWriter.java:30) 
at com.radicalninja.logger.FileWriter.<init>(FileWriter.java:0) 
at com.radicalninja.logger.LogManager.openExternalPublicStorage(LogManager.java:161) 
at com.radicalninja.logger.LogManager.createFileWriter(LogManager.java:115) 
at com.radicalninja.logger.LogFileController.openLogFile(LogFileController.java:18) 
at com.radicalninja.logger.LogFileController.<init>(LogFileController.java:12) 
at com.radicalninja.logger.Buffer.<init>(Buffer.java:0) 
at com.radicalninja.logger.WordBuffer.<init>(WordBuffer.java:0) 
at com.anysoftkeyboard.AnySoftKeyboard.onCreate(AnySoftKeyboard.java:328) 
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3808) 
at android.app.ActivityThread.access$2100(ActivityThread.java:222) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1883) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:158) 
at android.app.ActivityThread.main(ActivityThread.java:7229) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

我的問題是:我怎麼能檢查是否隨機訪問文件沒有正確關閉,應用程序嘗試創建相同的新RandomAccessFile在之前關閉以前的安裝已經在使用?

+0

更相關的問題是爲什麼你不釋放資源? – EJP

+0

嗨EJP,資源沒有被釋放的原因是因爲緩衝區永久保持打開,而應用程序正在運行捕獲鍵盤輸入,每隔兩小時,關閉,文字緩衝區上傳到AWS,然後緩衝區文件再次打開。 –

+0

這一切都爲客戶端正常工作,除非客戶意外地將應用程序再次安裝在已安裝它的電話機上。這不是一個常見問題(一次數百次安裝),但只是試圖找出所有可能的問題 –

回答

1

OK,這是我對這個問題cludge修復:

創建具有相同路徑的新文件時,應用程序首次打開,然後將其刪除。

似乎工作,但看起來不很優雅

相關問題