Вы используете метод onPostCreate()?
Согласно документации,
Вызывается, когда запуск активности завершен (после onStart() и onRestoreInstanceState (Bundle)). Приложения будут обычно не реализуют этот метод; он предназначен для системных классов выполнить окончательную инициализацию после запуска кода приложения.
Производные классы должны обращаться к реализации суперкласса этого метода. Если они этого не сделают, будет выбрано исключение.
Не рекомендуется использовать этот метод. Однако я использую его для настройки некоторых элементов после onCreate
. Я вижу, что некоторые люди используют его для выполнения чего-то между onResume()
, и им рекомендуется не делать этого, поскольку они не могут полагаться на этот метод (из-за его плохой документации).
Итак, могу ли я использовать настройку здесь (он вообще не полагается на onResume
)?
Вы когда-нибудь использовали этот метод и когда/почему?
Ответы
Ответ 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, так как моя программа не очень сложна, она работает хорошо.
Полезно делать что-то общее в базовом классе после того, как дочерний класс раздувает его макет.