AppWidgetProvider中的屏幕监控服务:高内存使用率

时间:2016-02-29 19:09:48

标签: android android-service android-appwidget

基于this,我在Service中启动了一个AppWidgetProvider来监视屏幕开/关和屏幕方向的变化,并相应地更新小部件。一切正常。正在检测屏幕事件,并且小部件正在按预期进行反应。

但是...

我发现与应用程序关联的内存使用率非常高。在我的设备上,在Application Manager > Running我的应用程序被标记为具有“1个进程和1个服务”,并且服务在服务中正确列出,并且应用程序在进程中列出。

但与我的应用程序相关的内存非常高。对于我的设备,它是37MB。但对于至少一个用户来说,它接近300MB!

如上所述不使用此Service时,内存使用率似乎没有任何问题,至少不是我可以从应用程序管理器中判断出来的。

我是否有任何方法可以实现长时间运行的Service,这会导致天文数据占用率过高?如果AppWidgetProviderService之间存在分隔,那么与常规窗口小部件更新相关的任何内存使用情况(例如,使用位图填充RemoteViews)都不会持续存在?

即使您在应用程序管理器中停止Service,然后立即启动它(没有加载小部件更新),内存使用率也会直接恢复到以前的状态。

关于如何继续,我有点迷失...在Android中有点内存管理的菜鸟......

1 个答案:

答案 0 :(得分:1)

看起来你正在对bitmap进行繁重的操作.Bitmaps会占用大量内存。在重新初始化或创建位图的新实例之前,你需要回收ie recycle()旧位图。

if(bitmap!=null){
//do ur operation on bitmap
 ..............
 .....................
bitmap.recycle();
}

请查看有关位图内存管理的详细文档。Displaying Bitmaps Efficiently