在Android中释放资源

时间:2013-11-05 19:28:34

标签: android memory resources

有没有办法强制清除应用程序中的所有已用资源?我想在onDestroy函数中清理缓存,但我真的不知道它是否足够。

关闭应用程序后,我遇到麻烦,因为我在应用程序中打开了很多图像,声音等等。如果我第二次快速打开应用程序,有很多次它无法打开某些资源,因为它仍然打开...

有任何提示吗?感谢

2 个答案:

答案 0 :(得分:1)

位图

  • 如果您通过BitmapFactory加载它们,它们会被缓存在内存中,不应该阻止您再次打开它。但是,请在您创建的recycle()个对象上调用Bitmap
  • 如果您使用其他活动打开它们,则无需担心任何事情。

声音&视频

  • 如果您使用MediaPlayer打开它们,请在完成后致电stop() release()MediaPlayer
  • 如果您使用其他活动打开它们,则无需担心任何事情。

这些只是我的(有限的)意见,在继续之前也会查看其他一些答案。

答案 1 :(得分:0)

一旦活动/应用程序完成,我遇到了释放内存的完全相同的问题。所以我用一种清理方法!
在每个活动的onDestroy中,调用方法清理。

 protected void onDestroy(){
      cleanUp(findViewById(android.R.id.content));
    }

 public void Cleanup(View rootView) {
        unbindDrawables(rootView);
        System.gc();
    }

  private void unbindDrawables(View view) {
        if (view.getBackground() != null)
            view.getBackground().setCallback(null);

        if (view instanceof ImageView) {
            ImageView imageView = (ImageView) view;
            imageView.setImageBitmap(null);
        } else if (view instanceof ViewGroup) {
            ViewGroup viewGroup = (ViewGroup) view;
            for (int i = 0; i < viewGroup.getChildCount(); i++)
                unbindDrawables(viewGroup.getChildAt(i));

            if (!(view instanceof AdapterView))
                viewGroup.removeAllViews();
        }
    }