[英]Dynamic Views created from Service not getting Garbage Collected
我正在使用动态视图。 我正在运行服务。 当该服务收到广播时,我将Myview添加到窗口管理器中,并在用户执行某些操作后将其删除。 但是由于服务一直在运行,所以每次广播时,我都会添加此动态视图“ myView”。 问题在于,从窗口管理器中删除它们后,它们并没有得到垃圾回收,并且堆内存分配不断增加。 不知道为什么吗? 由于它里面有位图。 经过5-6次操作后,我得到OutOfMemoryException。
public class Myservice extends Service{
private ParentView myView;
WakeReceiver receiver;
@Override
public void onCreate()
{
super.onCreate();
registerBroadCastReceiver();
}
//Performed when broadcast recieved
public void addLayout() {
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
myView = new ParentView(this);
windowManager.addView(myView, getLayoutParam());
}
//Performed when user performs action on ParentView
public void removeLayout() {
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
windowManager.removeView(myView);
}
private void registerBroadCastReceiver() {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
receiver = new WakeReceiver();
registerReceiver(receiver, filter);
}
private WindowManager.LayoutParams getLayoutParam() {
WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams();
localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
localLayoutParams.height = (int) (WindowManager.LayoutParams.MATCH_PARENT);
return localLayoutParams;
}
}
//父视图的代码
public class ParentView extends RelativeLayout {
MyService topService;
public ParentView(MyService topService) {
super(topService);
this.topService = topService;
LayoutInflater.from(topService).inflate(R.layout.parent_layout, this);
setBackgroundDrawable(topService.getResources()
.getDrawable(R.drawable.sample_image));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
topService.removeLayout();
}
}
使用system.gc();
这对我有帮助。 它调用垃圾收集器。 试试看,如果有效,请回复我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.