qiniu / android-sdk

Qiniu Resource (Cloud) Storage SDK for Android
MIT License
625 stars 225 forks source link

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

Closed frank-fan closed 9 years ago

frank-fan commented 9 years ago

若使用以下代码开启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的代码,貌似确实没有关闭代码。 这个应该是要处理下的, 否则文件上传后,相应的文件对象都没有关闭,长期操作会不会对应用产生影响。

longbai commented 9 years ago

@fanxu123 多谢,#132 已经处理过了,麻烦更新下代码到最新就好了

frank-fan commented 9 years ago

@longbai 收到,当前七牛SDK的最新版本7.0.7.1 还没有包含此项内容吧?

frank-fan commented 9 years ago

@longbai 我看了下 7.0.7.1的github上的发布确实有包含此项内容, https://github.com/qiniu/android-sdk/compare/v7.0.7.1...master

但在maven center里面的 7.0.7.1版本是不包含此项内容的,我反编译了下代码,会不会可能是打包上传过程没弄好?

请检查下。

longbai commented 9 years ago

奇怪,那我要重新发布下,多谢

longbai commented 9 years ago

重新发布了 7.0.7.2 查了下代码有的。老的可能做发布时 本地文件没有完全同步

frank-fan commented 9 years ago

@longbai 收到,多谢。