Skip to content

ResumeUploader的RandomAccessFile file 使用后未关闭 #135

@frank-fan

Description

@frank-fan

若使用以下代码开启StrictMode, 会在文件上传后抛出异常,应用退出,提示相应的RandomAccessFile未关闭。

 if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                    .detectDiskReads()
                    .detectDiskWrites()
                    .detectNetwork() // or .detectAll() for all detectable   problems
                    .penaltyLog()
                    .build());
            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                    .detectLeakedSqlLiteObjects()
                    .detectLeakedClosableObjects()
                    .penaltyLog()
                    .penaltyDeath()
                    .build());
        }

异常:

08-26 14:57:50.913  27269-27281/com.meiyaapp.meiya 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:184)
            at java.io.RandomAccessFile.<init>(RandomAccessFile.java:127)
            at com.qiniu.android.storage.ResumeUploader.run(ResumeUploader.java:78)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
08-26 14:57:50.913  27269-27281/com.meiyaapp.meiya W/System.err﹕ StrictMode VmPolicy violation with POLICY_DEATH; shutting down.

将StrictMode的开启代码移除后,应用就不会直接退出了,但提示的RandomAccessFile未关闭,应该是存在的。 我大致看了下com.qiniu.android.storage.ResumeUploader的代码,貌似确实没有关闭代码。
这个应该是要处理下的, 否则文件上传后,相应的文件对象都没有关闭,长期操作会不会对应用产生影响。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions