Android: Unable to destroy activity

一曲冷凌霜 提交于 2019-11-30 02:48:44

问题


I am using the following code to removes childs on every viewgroup:

protected void onDestroy() {
    super.onDestroy();
    this.liberarMemoria();
}

public void liberarMemoria(){
     imagenes.recycleBitmaps(); 
     this.unbindDrawables(findViewById(R.id.RelativeLayout1));
     System.gc();
}
private void unbindDrawables(View view) {
    if (view.getBackground() != null) {
    view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
    for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
        unbindDrawables(((ViewGroup) view).getChildAt(i));
    }
    ((ViewGroup) view).removeAllViews();
    }
}

where the view: R.id.RelativeLayout1 is a ListView.

But doing this I have en exception:

E/AndroidRuntime(582): java.lang.RuntimeException: Unable to destroy activity {...}: java.lang.UnsupportedOperationException: removeAllViews() is not supported in AdapterView

How can I solve this?


回答1:


Well, the error log pretty much explains it: do not call removeAllViews() on AdapterView. And your code at some point meets ViewGroup that also is AdapterView.

Just rule this case out using instanceof check or handle exception with try/catch wrapper.




回答2:


Verify if your ViewGroup isn't a instance of AdapterView.

Do something like that:

if (!(view instanceof AdapterView<?>))
    ((ViewGroup) view).removeAllViews();

So, on your code:

if (view instanceof ViewGroup) {
    for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
        unbindDrawables(((ViewGroup) view).getChildAt(i));
    }
    if (!(view instanceof AdapterView<?>))
        ((ViewGroup) view).removeAllViews();
}



回答3:


Remove that line? Or at least check if the operation is supported with try and catch.

Also, it is a bit confusing to want to do this at all in a method called unbindDrawables, unless it is just a badly named method (doesn't describe what it does fully).

Are you calling all of this in onDestroy? If so, is there benefit from doing this? I was under the impression that the system takes care of this sort of thing for you.




回答4:


Don't call it. UnsupportedOperationException is telling you that this method is not supported or functional so you'll have to accomplish the task another way. I don't see the need in calling this anyway as the garbage collector will handle this task. Bitmap recycling should be done manually if you need to ensure it being done.



来源:https://stackoverflow.com/questions/8405475/android-unable-to-destroy-activity

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!