根据文件,
活动启动完成时调用(在onStart()和之后调用 onRestoreInstanceState(Bundle)已被调用)。申请将 一般不实施这种方法;它适用于系统类 在应用程序代码运行后进行最终初始化。
派生类必须调用超类的实现 这种方法。如果他们不这样做,将抛出异常。
不建议使用此方法。但是,我用它来调整onCreate
之后的一些元素。我看到有些人用它来做onResume()
之间的事情,建议他们不要这样做,因为他们不能依赖这种方法(由于文档不好)。
那么,我可以在这里使用调整(根本不依赖onResume
)吗?
你有没有使用过这种方法?何时/为什么?
答案 0 :(得分:51)
onPostCreate非常有用。
使用onPostCreate作为子类'onCreate的回调方法将通知所有创建都已完成。 示例:如果您有共享相同布局的活动,则可以使用onPostCreate添加onClickListeners等
如果你要覆盖onPostCreate,最好在实现结束时调用super.onPostCreate。
答案 1 :(得分:15)
Google在他们的导航抽屉示例项目中使用 onPostCreate()。 ActionBarDrawerToggle需要在方向更改后同步,然后说:)
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
所以我认为 onPostCreate()只能在某些特定情况下使用...
答案 2 :(得分:13)
正如文档所述,onPostCreate主要用于框架使用。问题是:你打算在onPostCreate()中做什么,你不能在onCreate()或onResume()中做什么(即“调整一些元素”究竟是什么意思)?
我没有使用它,因为我认为没有理由这样做 - 我需要做的就是在onCreate或onResume上完成。但是谷歌本身就使用它TabActivity。
答案 3 :(得分:10)
这是对第二个答案的扩展:
想象一下,您正在尝试实现BaseActivity,它不会在OnCreate方法中设置任何布局。
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
然后想象你有一些其他的Activity(扩展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是制作优秀应用的常用做法!
答案 4 :(得分:1)
当我需要以编程方式更改视图时,我使用onPostCreate()
。我在findViewById()
中使用时呼叫onCreate
无效。
答案 5 :(得分:1)
您可能需要使用它。 特别是新的API。
可能有用的场景是轮换更改期间,或将状态返回到操作栏内有进度条的活动。
您需要在其onPostCreate()
@Override
protected void onPostCreate(Bundle savedInstanceState)
{
super.onPostCreate(savedInstanceState);
setProgressBarIndeterminateVisibility(false);
}
答案 6 :(得分:0)
由于没有一个答案在onRestoreInstanceState(Bundle)上提出了一个观点,我想在此提出一点意见。将调用此方法,如果强行从内存中删除应用程序,然后再由用户启动。这样我们就可以使用这种方法来保留活动状态,如果用户以前从内存中强行删除了应用程序,则使用Incase。
答案 7 :(得分:0)
根据事件名称'Post'的含义,我总是用它来检查元素大小可能会在onCreated期间被更改,尤其是在屏幕旋转后应该更改元素或布局。
答案 8 :(得分:0)
您可以在ActivityThread#performLaunchActivity
中检查执行顺序。然后,您会发现onPostCreate()
是活动onCreate(),onStart(),OnRestoreInstanceState()
之后执行的最终生命周期方法。然后,onResume
将被执行。
答案 9 :(得分:-1)
它刚刚在onCreate之后调用,因为我的程序不是很复杂,所以效果很好。 在子类扩展其布局
之后,在基类中做一些共同的事情是很有用的