Android: Очистить скрытый вид при использовании Window.addContentView? - PullRequest
2 голосов
/ 19 ноября 2009

Недавно я получил кое-что из того, что работает, так что мой «загрузочный» вид - это ImageView, который занимает весь экран, а затем я выгружаю основной вид (в данном случае GridView) поверх него. В создании деятельности я звоню:

setContentView( R.layout.loading_foo );

затем, когда загрузка AsyncTask завершена, я вызываю следующее:

LayoutInflater inflater = LayoutInflater.from( getApplicationContext() );
GridView gridview = (GridView) inflater.inflate( R.layout.foo, null );

//fade in the view as it's shown
gridview.setAnimation( AnimationUtils.loadAnimation( this, R.anim.fade_in ) );

//populate the items adapter
gridview.setAdapter( new FooGridAdapter( apps ) );

//now overlay the gridview on top of the loading_springboard page
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT );
getWindow().addContentView( gridview, layoutParams );

Нужно ли что-то делать, в частности, чтобы очистить представление loading_foo, чтобы уменьшить объем памяти, используемой моим приложением? Есть другие проблемы с этим подходом?

(Долгое время читатель, первый постер)

1 Ответ

0 голосов
/ 07 декабря 2009

Поскольку вы только добавляете больше контента в окно, ваш начальный loading_foo будет занимать место в памяти, даже если он не виден. Вы должны удалить это представление, чтобы очистить память.

Поскольку вы говорите, что размещаете GridView поверх загрузочного экрана, я предполагаю, что вы используете FrameLayout внизу ... Чтобы освободить память, вы должны удалить первого дочернего элемента, когда вид сетки полностью виден и загружен ... Во-первых, загрузочный вид может быть собран мусором и освободить память для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...