Подтвердить что ты не робот

Вы используете метод onPostCreate()?

Согласно документации,

Вызывается, когда запуск активности завершен (после onStart() и onRestoreInstanceState (Bundle)). Приложения будут обычно не реализуют этот метод; он предназначен для системных классов выполнить окончательную инициализацию после запуска кода приложения.

Производные классы должны обращаться к реализации суперкласса этого метода. Если они этого не сделают, будет выбрано исключение.

Не рекомендуется использовать этот метод. Однако я использую его для настройки некоторых элементов после onCreate. Я вижу, что некоторые люди используют его для выполнения чего-то между onResume(), и им рекомендуется не делать этого, поскольку они не могут полагаться на этот метод (из-за его плохой документации).

Итак, могу ли я использовать настройку здесь (он вообще не полагается на onResume)?
Вы когда-нибудь использовали этот метод и когда/почему?

4b9b3361

Ответ 1

Как указано в документации, onPostCreate в основном предназначен для использования в каркасе. Возникает вопрос: что вы намерены делать в onPostCreate(), чего вы не можете сделать в onCreate() или onResume() (то есть, что означает "настройка некоторых элементов" )?

Я не использую его, поскольку я не вижу причин для этого - все, что мне нужно сделать, можно сделать в onCreate или onResume. Однако сам Google использует его в нем TabActivity, например.

Ответ 2

onPostCreate может быть полезна, если вы создаете собственное расширение суперкласса Activity с функциональностью, которую должны использовать все ваши действия.

используя onPostCreate в качестве метода обратного вызова из подкласса onCreate, уведомит, что все создание завершено. Пример. Если у вас есть действия, разделяющие один и тот же макет, вы можете использовать onPostCreate для добавления onClickListeners и т.д.

Если вы переопределяете onPostCreate, лучше всего сделать вызов super.onPostCreate в конце вашей реализации.

Ответ 3

Google использует onPostCreate() в своем примере проекта для навигационного ящика. ActionBarDrawerToggle необходимо синхронизировать после изменения ориентации, скажем:)

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

    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

Поэтому я думаю, что onPostCreate() следует использовать только в определенных ситуациях...

Ответ 4

Это расширение для второго ответа:

Представьте, что вы пытаетесь реализовать BaseActivity, который не устанавливает какой-либо макет в методе OnCreate.

public abstract class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    
    }
}

Тогда представьте, что у вас есть другое действие (расширение BaseActivity), которое устанавливает некоторый макет:

public class MainActivity extends BaseActivity { 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<Button
    android:id="@+id/my_btn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
</LinearLayout>

Итак, в первый раз, когда вы можете использовать свою кнопку в BaseActivity, это метод onPostCreate:

public abstract class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        Button btn = (Button) findViewById(R.id.myBtn); //this is the when you can initialise your button

    }

}

Использование BaseActivity - распространенная практика создания хороших приложений!

Ответ 5

Я использую onPostCreate(), когда мне нужно изменить представление программно. Поскольку вызов findViewById() не работает, когда я использую onCreate.

Ответ 6

Там могут быть ситуации, которые вам понадобятся использовать. особенно с новыми API.

Сценарий, который может быть полезен, заключается в изменении поворота или возвращении к активности, которая имеет индикатор выполнения внутри панели действий. вам нужно будет установить внутри него ложь onPostCreate()

@Override
protected void onPostCreate(Bundle savedInstanceState)
{
        super.onPostCreate(savedInstanceState);
        setProgressBarIndeterminateVisibility(false);
}

Ответ 7

Поскольку ни один из ответов не сделал точку в onRestoreInstanceState (Bundle), я хочу здесь остановиться. Этот метод будет вызываться, если приложение принудительно удалено из памяти, а затем снова запускается пользователем. Чтобы мы могли использовать этот метод для сохранения состояния активности, Incase, если пользователь ранее удалил приложение из памяти.

Ответ 8

В соответствии с названием события "Post", я всегда использую его для проверки размера элементов, которые могут быть изменены во время onCreated, особенно если элементы или макеты следует изменить после поворота экрана.

Ответ 9

он просто вызван после onCreate, так как моя программа не очень сложна, она работает хорошо. Полезно делать что-то общее в базовом классе после того, как дочерний класс раздувает его макет.