当我去另一个时滑翔崩溃 activity
glide crashing when I go to another activity
我在 Recyclerview 适配器中使用 Glide 从服务器加载图像问题发生在我关闭 Activity 或转到另一个 activity,
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final MyAdapterHolader postholader = (MyAdapterHolader) holder;
final ListMeesg move = (ListMeesg) moveList.get(position);
glide.asBitmap().load(move.imagp).skipMemoryCache(true).override(move.width,move.hegth).format(DecodeFormat.PREFER_RGB_565).into(new CustomTarget<Bitmap>(move.width,move.hegth) {
@Override
public void onResourceReady(@NonNull final Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
postholader.imgtitle.setImageBitmap(resource);
new Thread(new Runnable() {
public void run() {
File file1 = new File(Environment.getExternalStoragePublicDirectory("/Android/data/mjplus.messages/"), move.imagn);
try {
if (!file1.exists()) {
FileOutputStream fileOutputStream;
fileOutputStream = new FileOutputStream(file1);
resource.compress(CompressFormat.JPEG, 80, fileOutputStream);
fileOutputStream.close();
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
}).start();
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
postholader.imgtitle.setImageDrawable(placeholder);
}
@Override
public void onDestroy() {
}
@Override
public void onStop() {
}
@Override
public void onLoadFailed(@Nullable Drawable errorDrawable) {
]
}
@Override
public void onLoadStarted(@Nullable Drawable placeholder) {
]
}
});
}
logcat:
09-16 17:51:34.621 29129-29144/mjplus.messages I/art: Background partial concurrent mark sweep GC freed 30594(2MB) AllocSpace objects, 26(4MB) LOS objects, 36% free, 28MB/44MB, paused 3.442ms total 115.362ms
09-16 17:51:34.661 29129-29141/mjplus.messages 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 com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:287)
at com.android.okhttp.Connection.upgradeToTls(Connection.java:242)
at com.android.okhttp.Connection.connect(Connection.java:162)
at com.android.okhttp.Connection.connect(Connection.java:174)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:316)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:249)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:397)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:118)
at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25)
at com.android.tools.profiler.support.network.httpurl.TrackedHttpURLConnection.connect(TrackedHttpURLConnection.java:128)
at com.android.tools.profiler.support.network.httpurl.HttpsURLConnection$.connect(HttpsURLConnection$.java:366)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:104)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:59)
at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)
at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62)
at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:309)
at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279)
at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory.run(GlideExecutor.java:446)
09-16 17:51:34.661 29129-29141/mjplus.messages W/System.err: StrictMode VmPolicy violation with POLICY_DEATH; shutting down.
问题是当 Glide 被打断时你的关闭没有被调用
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
你可以使用 try-with-resource
if (!file1.exists()) {
try (
//put the resources that you want to close in the round brackets
FileOutputStream fileOutputStream = new FileOutputStream(file1);
){
resource.compress(CompressFormat.JPEG, 80, fileOutputStream);
} catch (IOException e2) { ... your exception stuff...}
}
请注意,不再需要调用关闭。
我在 Recyclerview 适配器中使用 Glide 从服务器加载图像问题发生在我关闭 Activity 或转到另一个 activity,
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final MyAdapterHolader postholader = (MyAdapterHolader) holder;
final ListMeesg move = (ListMeesg) moveList.get(position);
glide.asBitmap().load(move.imagp).skipMemoryCache(true).override(move.width,move.hegth).format(DecodeFormat.PREFER_RGB_565).into(new CustomTarget<Bitmap>(move.width,move.hegth) {
@Override
public void onResourceReady(@NonNull final Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
postholader.imgtitle.setImageBitmap(resource);
new Thread(new Runnable() {
public void run() {
File file1 = new File(Environment.getExternalStoragePublicDirectory("/Android/data/mjplus.messages/"), move.imagn);
try {
if (!file1.exists()) {
FileOutputStream fileOutputStream;
fileOutputStream = new FileOutputStream(file1);
resource.compress(CompressFormat.JPEG, 80, fileOutputStream);
fileOutputStream.close();
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
}).start();
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
postholader.imgtitle.setImageDrawable(placeholder);
}
@Override
public void onDestroy() {
}
@Override
public void onStop() {
}
@Override
public void onLoadFailed(@Nullable Drawable errorDrawable) {
]
}
@Override
public void onLoadStarted(@Nullable Drawable placeholder) {
]
}
});
}
logcat:
09-16 17:51:34.621 29129-29144/mjplus.messages I/art: Background partial concurrent mark sweep GC freed 30594(2MB) AllocSpace objects, 26(4MB) LOS objects, 36% free, 28MB/44MB, paused 3.442ms total 115.362ms
09-16 17:51:34.661 29129-29141/mjplus.messages 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 com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:287)
at com.android.okhttp.Connection.upgradeToTls(Connection.java:242)
at com.android.okhttp.Connection.connect(Connection.java:162)
at com.android.okhttp.Connection.connect(Connection.java:174)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:316)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:249)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:397)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:118)
at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25)
at com.android.tools.profiler.support.network.httpurl.TrackedHttpURLConnection.connect(TrackedHttpURLConnection.java:128)
at com.android.tools.profiler.support.network.httpurl.HttpsURLConnection$.connect(HttpsURLConnection$.java:366)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:104)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:59)
at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)
at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62)
at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:309)
at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279)
at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory.run(GlideExecutor.java:446)
09-16 17:51:34.661 29129-29141/mjplus.messages W/System.err: StrictMode VmPolicy violation with POLICY_DEATH; shutting down.
问题是当 Glide 被打断时你的关闭没有被调用
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
你可以使用 try-with-resource
if (!file1.exists()) {
try (
//put the resources that you want to close in the round brackets
FileOutputStream fileOutputStream = new FileOutputStream(file1);
){
resource.compress(CompressFormat.JPEG, 80, fileOutputStream);
} catch (IOException e2) { ... your exception stuff...}
}
请注意,不再需要调用关闭。