为什么OnCreate只应在Activity的开头调用一次?

时间:2012-12-20 03:40:18

标签: android android-activity oncreate android-lifecycle

我想知道,为什么在活动开始时只调用OnCreate()一次?

我们可以在同一活动中多次拨打OnCreate()吗?

如果是,我们怎么称呼呢?谁能举个例子?

非常感谢!!!

7 个答案:

答案 0 :(得分:6)

你为什么要再次打电话?除非重建活动,由系统调用。您无法手动调用OnCreate,这与您不会两次调用setContentView()的原因相同。作为文档:

  

onCreate(Bundle)是初始化活动的地方。最   重要的是,在这里你通常会用一个调用setContentView(int)   布局资源定义您的UI,并使用findViewById(int)来   检索该UI中需要与之交互的小部件   编程。   一旦你完成初始化你的小部件你为什么要这样做?

<强>更新 我回过头来说,你可以手动完成这个,但我仍然不明白为什么要调用它。你试过Fragments吗?
Samplecode:

public class MainActivity extends Activity implements OnClickListener {
        private Button btPost;
        private Bundle state;
        private int counter = 0;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            state = savedInstanceState;
            btPost = (Button) findViewById(R.id.btPost);
            btPost.setOnClickListener(this);
            Toast.makeText(getBaseContext(), " " + counter, Toast.LENGTH_LONG)
                    .show();
        }

        @Override
        public void onClick(View v) {
            counter++;
            this.onCreate(state);
        }
    }

答案 1 :(得分:1)

onCreate()方法执行基本的应用程序启动逻辑,该逻辑在活动的整个生命周期中只应发生一次。 onCreate()完成执行后,系统会快速连续调用 onStart() onResume()方法。

初始化过程 consumes lot of resources 并且为了避免这种情况,一旦创建的活动永远不会被完全销毁,但在后台仍然不可见,因此一旦它被带回到前面,重新初始化就不会不会发生。

答案 2 :(得分:1)

您想要手动调用onCreate。

然后就这样做。

    finish();
    Intent intent = new Intent(Main.this, Main.class);
    startActivity(intent);

finish()调用当前的东西。

如果你在这个活动中做了一些getExtra,那么就这样做,

@Override
    protected void onSaveInstanceState(Bundle outState) {

            outState.putString("key",your_variable);
        super.onSaveInstanceState(outState);

    }

并将其添加到onCreate()

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
if(savedInstanceState != null)
        {
            your_variable= savedInstanceState.getString("key"); 
        }
}

答案 3 :(得分:0)

为什么要多次拨打onCreate?您将重新创建活动。如果这是您出于任何原因所需的内容,则完成活动并使用intent创建该活动的新实例。否则,您同时有两个活动实例。希望有所帮助,但如果这没有意义,那么添加更多关于你想要的信息,以便我们有上下文

答案 4 :(得分:0)

OnCreate基本上用于创建您的活动(UI)。如果您已经创建了活动,则无需再次创建活动。

它主要用于初始化您的活动并创建活动的用户界面。 Activity是一个可以反复使用的可视部分。我认为你的问题不是重新创建活动,而是重新初始化活动的所有组件。为此,您可以创建一个方法initialize_act()并从任何地方调用它......

答案 5 :(得分:0)

@OnCreate仅用于初始创建,因此只应调用一次。

如果你想要多次完成任何处理,你应该把它放在别处,也许是在@OnResume方法中。

答案 6 :(得分:0)

最近我意识到onCreate会在每个屏幕方向更改(横向/纵向)上调用。在规划初始化过程时,您应该注意这一点。 可以在AndroidManifest.xml中禁止重新创建:

<activity
            android:configChanges="keyboardHidden|orientation"
            android:name=".testActivity"
            android:label="@string/app_name"></activity>