Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RandomAccessFile在附加的堆栈跟踪中获取了一个资源,但从未释放_Java_Android - Fatal编程技术网

Java RandomAccessFile在附加的堆栈跟踪中获取了一个资源,但从未释放

Java RandomAccessFile在附加的堆栈跟踪中获取了一个资源,但从未释放,java,android,Java,Android,好吧,这是个奇怪的问题 我有一个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 r

好吧,这是个奇怪的问题

我有一个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)
03 20:20:34.678 22741-22749/com.menny.android.anysoftkeyboard E/StrictMode:已在附加堆栈跟踪中获取资源,但从未释放。有关避免资源泄漏的信息,请参阅java.io.Closeable。
java.lang.Throwable:未调用显式终止方法“close”
位于dalvik.system.CloseGuard.open(CloseGuard.java:180)
位于java.io.RandomAccessFile。(RandomAccessFile.java:127)
在com.radicalnija.logger.FlushableCipherOutputStream。(FlushableCipherOutputStream.java:50)
在com.radicalnija.logger.CipherUtils.flushableEncryptedBufferedWriter上(CipherUtils.java:31)
位于com.radicalnija.logger.FileWriter.openFileWriter(FileWriter.java:41)
位于com.radicalnija.logger.FileWriter.(FileWriter.java:30)
位于com.radicalnija.logger.FileWriter。(FileWriter.java:0)
在com.radicalnija.logger.LogManager.openExternalPublicStorage(LogManager.java:161)上
在com.radicalnija.logger.LogManager.createFileWriter上(LogManager.java:115)
位于com.radicalnija.logger.LogFileController.openLogFile(LogFileController.java:18)
位于com.radicalnija.logger.LogFileController.(LogFileController.java:12)
位于com.radicalnija.logger.Buffer.(Buffer.java:0)
位于com.radicalnija.logger.WordBuffer。(WordBuffer.java:0)
在com.anysoftkeyboard.anysoftkeyboard.onCreate上(anysoftkeyboard.java:328)
位于android.app.ActivityThread.handleCreateService(ActivityThread.java:3808)
在android.app.ActivityThread.access$2100(ActivityThread.java:222)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1883)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:158)
位于android.app.ActivityThread.main(ActivityThread.java:7229)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1230)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

我的问题是:如何检查随机访问文件是否未正确关闭,并在应用程序尝试创建上一次安装已使用的相同新的
RandomAccessFile
之前将其关闭?

确定这是我针对此问题的cludge修复:

在应用程序首次打开时使用相同路径创建新文件,然后将其删除


似乎有效,但似乎不是很优雅

更相关的问题是,为什么不释放资源?嗨,EJP,资源没有释放的原因是,在应用程序运行以捕获键盘输入时,缓冲区一直保持打开状态,每隔两个小时,它就会关闭,字缓冲区会上载到AWS,然后缓冲区文件再次打开。这对客户端来说都可以正常工作,除非客户端意外地在已经安装了应用程序的手机上再次安装该应用程序。这不是一个常见的问题(数百次安装中只有一次),但只是尝试跟踪所有可能的问题