Фрагмент вывоза мусора - PullRequest
0 голосов
/ 26 июля 2011

Я пишу приложение, в котором я использую фрагменты, и я вижу действительно запутанное поведение в моих дампах кучи DDMS: когда я первоначально запускаю свое приложение, допустим, что в стеке есть пара фрагментов:

HomeFragment: 1
WelcomeFragment: 1
SignInFragment: 1
CreateAcctFragment: 1

Непосредственным доминирующим фактором для каждого из них является.

Затем я поворачиваю экран.Теперь я получаю:

HomeFragment: 2
WelcomeFragment: 2
SignInFragment: 2
CreateAcctFragment: 2

Теперь непосредственные доминанты для каждого экземпляра для одного и android.support.v4.app.FragmentManagerImpl для другого.

Сначала я думал, что у меня утечка памяти, что один изфрагменты не собирали мусор, как это случилось со мной раньше.Однако в этом случае каждый раз, когда я поворачивал экран, я добавлял еще один экземпляр каждого.Теперь независимо от того, сколько раз я поворачиваю экран, я «вижу» только 2 экземпляра каждого.

Есть какие-нибудь мысли / предложения?

1 Ответ

1 голос
/ 14 декабря 2011

Вы должны создавать экземпляры фрагментов только в том случае, если ваш метод onCreate () не передал пакет. Платформа Android будет создавать их для вас, если пакет будет передан onCreate ().

Это пример Activity.onCreate из фрагмента документации: http://developer.android.com/guide/topics/fundamentals/fragments.html

public static class DetailsActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getResources().getConfiguration().orientation
                == Configuration.ORIENTATION_LANDSCAPE) {
            // If the screen is now in landscape mode, we can show the
            // dialog in-line with the list so we don't need this activity.
            finish();
            return;
        }

        if (savedInstanceState == null) {
            // During initial setup, plug in the details fragment.
            DetailsFragment details = new DetailsFragment();
            details.setArguments(getIntent().getExtras());
            getFragmentManager().beginTransaction().add(android.R.id.content, details).commit();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...