我在我的Android应用程序中使用滑翔进行图像加载,以避免任何崩溃,我正在加载带有应用程序上下文的图像。这会对应用程序和内存的性能产生什么影响?
匿名用户
private fun RequestManager.syncWithLifecycleOwner(view: View): RequestManager {
val syncRequest = object : DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) = onStart()
override fun onStop(owner: LifecycleOwner) = onStop()
override fun onDestroy(owner: LifecycleOwner) {
onDestroy()
owner.lifecycle.removeObserver(this)
}
}
view.findViewTreeLifecycleOwner()?.lifecycle?.addObserver(syncRequest)
return this
}
然后,您可以制作一个简单的扩展函数,如下所示:
fun ImageView.loadUrl(url: String) {
Glide
.with(context.applicationContext)
.syncWithLifecycleOwner(this)
.load(url)
.into(this)
}
AndroidX生命周期库中存在findViewTreeLifecycleOwner()。它提供了该特定ImageView所附加的活动或片段视图的生命周期(viewLifecycleOwner)。您需要从视图中传入应用程序上下文,以确保Glide libs不会调用回调本身。
这对应用程序和内存的性能有什么影响?
Glide提供了很多<代码>。with()方法有一个原因:它遵循生命周期。
想象一个动态添加到活动中的片段。在其onCreateView方法中,它启动3MB图像的滑动加载。现在,如果用户按下后退按钮,片段被删除,或者整个活动被关闭,该怎么办?
与(getActivity()一起使用。getApplicationContext())
什么都不会发生,所有3MB的数据都会被下载,然后解码、缓存,甚至可能设置为ImageView,然后对其进行垃圾收集,因为对它的唯一引用来自Glide内部
与(getActivity())一起使用,则Glide订阅活动的生命周期事件,并且发生与上述相同的事情,但仅当活动停止或销毁时
因此,最佳实践是使用尽可能接近的上下文/片段来避免未使用的请求完成!(还有一种手动停止负载的方法:
Glide.clear(ImageView | Target)
)
若要在实践中应用此方法,请尽可能将
与(this)
一起使用,但如果不是,例如在适配器或集中式图像加载方法中,请将RequestManager glide作为参数传递,并使用
glide.load(…
,例如:
static loadImage(RequestManager glide, String url, ImageView view) {
glide.load(url).into(view);
}
或在适配器中:
class MyAdapter extends WhichEveryOneYouUse {
private final RequestManager glide;
MyAdapter(RequestManager glide, ...) {
this.glide = glide;
...
}
void getView/onBindViewHolder(... int position) {
// ... holder magic, and get current item for position
glide.load... or even loadImage(glide, item.url, holder.image);
}
}
并从活动/片段中使用这些:
loadImage(Glide.with(this), url, findViewById(R.id.image));
// or
list.setAdapter(new MyAdapter(Glide.with(this), data));
我正在处理一个Spring Boot应用程序,其中我使用该应用程序公开SOAP WebService。我在Spring boot应用程序中使用Apache CFX framework for SOAP impl。我正在使用基于注释的方法。 我在一个bean中的Spring Boot配置文件中设置应用程序上下文时遇到了问题。下面是我的代码。 配置文件如下所示。 现在我有了bean SOAPproce
问题内容: 我们正在尝试将 图像预加载 到缓存中,以便稍后加载(图像位于应用程序的 Asset文件夹 中) 我们尝试了什么: 问题:仅当我们尝试加载/显示图像时才对它们进行缓存:必须先将它们加载到内存中,这样它们才能更快地显示出来。 我们还尝试使用GlideModule来增加CacheMemory的大小: 在清单中: 到目前为止没有任何工作。任何想法? 我们尝试使用不可见的1 dp imageVi
我正在使用Glide库在imageview中加载图像,并使用以下代码。 灰色占位符在图像未加载之前可见,但在图像在imageview中加载后,占位符仍会出现,并在该图像后显示一些空白。 我如何解决这个问题。如果你有任何想法,请帮助我。
我是spring的新手,我想知道是否可以只通过注释必须注入变量的类来加载应用程序(而不是使用ApplicationContext ctx=new ApplicationContext(“MyAppContext”))。 我举以下例子: 我有一个类,其中一个字符串应该是自动连线的 spring bean配置文件(testSpringContext.xml)如下所示 现在,我想使用中的以下代码显示自动
我有一个相当简单的设置。一个包含3个模块的maven项目:core/webapp/model。我正在使用Spring boot来升级我的应用程序。在webapp中,我有一个简单的类WebappConfig如下: 当我部署abcd.war时,applicationcontext加载了两次,并导致以下错误stracktrace: 不存在我前面提到的web.xml。 一些有趣的事情,我不知道为什么: n
我在我的src/test/resources路径中创建了一个application-integrationtest.yaml,所以我的测试是针对创建的docker TestContainer运行的。问题是没有加载我的application-integrationtest.yaml。 我正在运行一个SpringBoot2.x应用程序 原因:org.springframework.beans.Bean