Android AppWidgetProvider中的屏幕监视服务:内存使用率高
基于,我实现了一个从Android AppWidgetProvider中的屏幕监视服务:内存使用率高,android,android-service,android-appwidget,Android,Android Service,Android Appwidget,基于,我实现了一个从AppWidgetProvider启动的服务,它监视屏幕开/关和屏幕方向的变化,并相应地更新小部件。一切都很好。正在检测屏幕事件,小部件正在按预期进行反应 但是 我发现与应用程序相关的内存使用率非常高。在我的设备上,在应用程序管理器>运行中,我的应用程序被标记为具有“1个进程和1个服务”,服务正确地列在服务中,应用程序在进程中列在下面 但与我的应用程序相关的内存非常高。我的设备是37MB。但对于至少一个用户来说,它接近300MB 如果不使用上述服务,则内存使用率高似乎没有任何
AppWidgetProvider
启动的服务,它监视屏幕开/关和屏幕方向的变化,并相应地更新小部件。一切都很好。正在检测屏幕事件,小部件正在按预期进行反应
但是
我发现与应用程序相关的内存使用率非常高。在我的设备上,在<代码>应用程序管理器>运行代码>中,我的应用程序被标记为具有“1个进程和1个服务”,服务正确地列在服务中,应用程序在进程中列在下面
但与我的应用程序相关的内存非常高。我的设备是37MB。但对于至少一个用户来说,它接近300MB
如果不使用上述服务
,则内存使用率高似乎没有任何问题,至少从应用程序管理器可以看出这一点
在我实现长期运行的服务的过程中,是否有任何东西会导致极高的内存使用率?AppWidgetProvider
和服务
之间是否应该有一个分隔,以便与常规小部件更新相关的任何内存使用(例如,使用位图填充RemoteView
)不会持续
问题是,即使您在Application Manager中停止服务
,然后立即启动它(无需加载小部件更新),内存使用量也会直接恢复到以前的水平
我有点不知道如何继续。。。我是安卓系统内存管理方面的一个新手…看起来您正在对位图进行繁重的操作。位图占用大量内存。在重新初始化或创建位图的新实例之前,您需要回收旧位图,即recycle()
if(bitmap!=null){
//do ur operation on bitmap
..............
.....................
bitmap.recycle();
}
请仔细阅读位图内存管理的详细文档。//使用小部件进行操作发布通信代码我已经添加了更改方向的基本操作。这是半伪代码,因为在确定RemoteView
时需要用到很多东西,基于新的方向和在Widget中获取内容事实上你正在创建很多对象。所以我想知道你在评论中写了什么…如果没有这些,我不能help@drmbrewer创建remoteview是否涉及位图?是的。基本上,我使用基本设置创建RemoteView(包括单击处理程序等,但还没有位图),然后从缓存中获取位图,通过使用新RemoteView的partiallyUpdateAppWidget()
加载,然后获取新位图并将其加载到原始RemoteView中,并使用该位图执行完整的updateAppWidget()
。你认为位图没有被垃圾收集吗?问题是,我不认为内存使用会随着时间的推移而增长(比如内存泄漏)。。。它只是从大开始,一直保持大。。。有些比另一些大。一位用户说他的内存对于我的应用只有10MB。