具有多个视图的应用程序的内存泄漏
memory leak with an app with many views
我的应用程序有很多视图,每个视图上都有几个占用内存的图像和图标;当我打开视图时,使用的内存增加到内存泄漏。我注意到视图已正确缓存,但在这种情况下我想限制缓存并从缓存中删除视图,我该怎么做?
如您所述,Gluon 视图已正确缓存。
为此,每当您添加 View
使用:
MobileApplication.getInstance().addViewFactory(MY_VIEW, () -> new View(new Label("Hi")));
Gluon Mobile 框架在内部为您管理视图和层的缓存。
只要需要视图,就会创建并缓存它。下次您需要它时,它将从缓存中检索(如果存在)或重新创建。
当您的设备内存不足时,可以自动从缓存中删除现有视图。
但是,如果您想手动执行此操作,Gluon MobileApplication
class 实际上包含一个方法来 unregister 来自视图工厂的视图:
MobileApplication.getInstance().removeViewFactory(MY_VIEW);
请注意,这将删除实例和工厂本身,因此下次需要时,您必须再次将其添加到工厂。
为此你可以使用:
if (! MobileApplication.getInstance().isViewPresent(MY_VIEW)) {
MobileApplication.getInstance().addViewFactory(MY_VIEW, () -> new View(new Label("Hi")));
MobileApplication.getInstance().switchView(MY_VIEW);
}
我的应用程序有很多视图,每个视图上都有几个占用内存的图像和图标;当我打开视图时,使用的内存增加到内存泄漏。我注意到视图已正确缓存,但在这种情况下我想限制缓存并从缓存中删除视图,我该怎么做?
如您所述,Gluon 视图已正确缓存。
为此,每当您添加 View
使用:
MobileApplication.getInstance().addViewFactory(MY_VIEW, () -> new View(new Label("Hi")));
Gluon Mobile 框架在内部为您管理视图和层的缓存。
只要需要视图,就会创建并缓存它。下次您需要它时,它将从缓存中检索(如果存在)或重新创建。
当您的设备内存不足时,可以自动从缓存中删除现有视图。
但是,如果您想手动执行此操作,Gluon MobileApplication
class 实际上包含一个方法来 unregister 来自视图工厂的视图:
MobileApplication.getInstance().removeViewFactory(MY_VIEW);
请注意,这将删除实例和工厂本身,因此下次需要时,您必须再次将其添加到工厂。
为此你可以使用:
if (! MobileApplication.getInstance().isViewPresent(MY_VIEW)) {
MobileApplication.getInstance().addViewFactory(MY_VIEW, () -> new View(new Label("Hi")));
MobileApplication.getInstance().switchView(MY_VIEW);
}