2016-11-07 4 views
3

OKこれは奇妙なものです。Java RandomAccessFile添付されたスタックトレースでリソースが取得されたが、決して解放されなかった

私はユーザーがキーボードで入力したすべてのもののバッファーをファイル(buffered.log)に保持するAndroidアプリを持っています。クライアントが以前にそれをインストールしたsomebodiesの電話にアプリをインストールする奇妙な状況を除いて、すべてが完全に動作します。

アプリは、このエラーがスローされます。

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、リソースが解放されない理由は、アプリケーションがキーボード入力をキャプチャするために実行されている間にバッファが永続的に開いたままになっていること、2時間ごとに閉じられていること、ワードのバッファがAWSにアップロードされていること、再び開いています。 –

+0

クライアントが既にインストールされているsomebodiesの電話機に誤って再度アプリケーションをインストールした場合を除いて、クライアントの場合はすべて正常に動作します。これは一般的な問題ではなく(何百回ものインストールで)、すべての可能な問題を追跡しようとしています –

答えて

1

OKこれは、この問題のための私のcludgeの修正です:

は、アプリが最初に開いたときに同じパスで新しいファイルを作成し、それを削除します。

非常にエレガントなように見えますが、非常にエレガントではありません。

関連する問題