我想知道,为什么OnCreate()
在活动开始时只调用一次?
我们可以OnCreate()
在同一个活动中多次调用吗?
如果是,那我们怎么称呼它?谁能举个例子?
非常感谢!!!
我想知道,为什么OnCreate()
在活动开始时只调用一次?
我们可以OnCreate()
在同一个活动中多次调用吗?
如果是,那我们怎么称呼它?谁能举个例子?
非常感谢!!!
为什么要再次调用它?除非活动被重建,由系统调用。您不能手动调用 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);
}
}
onCreate()方法执行基本的应用程序启动逻辑,在活动的整个生命周期中应该只发生一次。一旦onCreate()完成执行,系统会快速连续调用onStart()和onResume()方法。
初始化过程consumes lot of resources
和为避免这种情况,一旦创建的活动永远不会完全销毁,但在后台对用户不可见,因此一旦将其带回前面,就不会发生重新初始化。
您要手动调用 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");
}
}
为什么要onCreate
多次调用?您将重新创建活动。如果这是您出于某种原因需要的内容,请完成该活动并使用 anintent
创建该活动的新实例。否则,您将同时拥有该活动的两个实例。希望这会有所帮助,但如果这没有意义,请添加更多关于您想要什么的信息,以便我们了解上下文
OnCreate 基本上用于创建您的活动(UI)。如果您已经创建了活动,那么您不需要像已经创建的那样再次创建它。
它基本上用于初始化您的活动并创建活动的用户界面。Activity 是一个视觉部分,您可以一次又一次地使用它。我认为您的问题不是重新创建活动,而是重新初始化活动的所有组件。为此,您可以创建一个方法 initialize_act() 并从任何地方调用它...
@OnCreate 仅用于初始创建,因此只能调用一次。
如果您希望多次完成任何处理,则应将其放在其他地方,也许在 @OnResume 方法中。
最近我意识到每次屏幕方向更改(横向/纵向)都会调用 onCreate。在规划初始化过程时,您应该意识到这一点。可以在 AndroidManifest.xml 中抑制娱乐:
<activity
android:configChanges="keyboardHidden|orientation"
android:name=".testActivity"
android:label="@string/app_name"></activity>