7

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

我们可以OnCreate()在同一个活动中多次调用吗?

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

非常感谢!!!

4

7 回答 7

6

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

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

更新 我收回一些话,您可以手动执行此操作,但我仍然不明白为什么要调用它。你试过片段吗?
示例代码:

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);
        }
    }
于 2012-12-20T03:44:53.637 回答
1

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

初始化过程consumes lot of resources和为避免这种情况,一旦创建的活动永远不会完全销毁,但在后台对用户不可见,因此一旦将其带回前面,就不会发生重新初始化。

于 2012-12-20T03:49:37.310 回答
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"); 
        }
}
于 2012-12-20T04:01:22.440 回答
0

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

于 2012-12-20T03:44:31.423 回答
0

OnCreate 基本上用于创建您的活动(UI)。如果您已经创建了活动,那么您不需要像已经创建的那样再次创建它。

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

于 2012-12-20T03:51:16.707 回答
0

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

如果您希望多次完成任何处理,则应将其放在其他地方,也许在 @OnResume 方法中。

于 2012-12-20T04:01:41.007 回答
0

最近我意识到每次屏幕方向更改(横向/纵向)都会调用 onCreate。在规划初始化过程时,您应该意识到这一点。可以在 AndroidManifest.xml 中抑制娱乐:

<activity
            android:configChanges="keyboardHidden|orientation"
            android:name=".testActivity"
            android:label="@string/app_name"></activity>
于 2016-03-26T22:18:44.383 回答