【问题标题】:onCreate being called again when navigating away from Activity离开 Activity 时再次调用 onCreate
【发布时间】:2014-03-04 00:48:11
【问题描述】:

代码效果很好。但是,从活动生命周期的角度来看,我看到了一些奇怪的东西。 onCreate 代码基本上将适配器设置为相关的 GridView,并从数据库中提取项目并填充所述 GridView。用户可以点击每个项目,将项目的“playerId”推送到 HubActivity。

以下是我的onCreate代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Const.err("##> Running PlayerSearchActivity.onCreate");
    setContentView(R.layout.activity_playersearch);
    this.mPlayerSearchBtn=(Button) findViewById(R.id.playerSearchButton);
    this.mPlayerSearchText=(TextView) findViewById(R.id.playerSearchText);
    this.mPlayerSearchGridView=(GridView) findViewById(R.id.psearch_playersearchgrid);
    this.mSavedPlayersGridView=(GridView) findViewById(R.id.psearch_savedplayersgrid);
    mPlayerSearchBtn.setOnClickListener(this);

    this.savedPlayersAdapter = new PlayerGridAdapter(this);
    mSavedPlayersGridView.setAdapter(savedPlayersAdapter);
    mSavedPlayersGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position,long arg3) {
            Intent intent = new Intent(getApplicationContext(), HubActivity.class);
            intent.putExtra(Keys._PLAYERID,savedPlayersAdapter.getItemPlayerId(position));
            startActivity(intent);
        }
    });

    Const.err("<## Completed PlayerSearchActivity.onCreate");

}

我很好奇每个方法是如何被调用的,所以我在函数周围应用了一些日志记录 (Const.err)。结果很奇怪:

03-04 00:29:50.942:  ##> Running PlayerSearchActivity.onCreate
03-04 00:29:50.982:  <## Completed PlayerSearchActivity.onCreate
03-04 00:29:50.982:  ##> Running PlayerSearchActivity.onResume
03-04 00:29:51.058:  <## Completed PlayerSearchActivity.onResume

---Clicked item---

03-04 00:29:54.718:  ##> Running PlayerSearchActivity.onCreate
03-04 00:29:54.730:  <## Completed HubActivity.onCreate
..

首先,为什么在我单击一个项目后会调用 onCreate?此外,我希望看到“Completed PlayerSearchActivity.onCreate”消息,但这从未发生过。

【问题讨论】:

  • 每次运行应用程序时,您是否获得相同的日志?我可以看到,在您的 PlayerSearchActivity 启动后,您得到了“Completed PlayerSearchActivity.onCreate”。此外,由于消息是异步的,因此您有时可能无法以正确的顺序获取它们。尝试放置断点并查看控件。同样带有断点的日志应该按正确的顺序排列。
  • @Sushil - 是的,我每次运行它时都会得到完全相同的日志。是的,我期待该日志底部出现一条消息“已完成 PlayerSearchActivity.onComplete”,但它永远不会发生!显然有些奇怪,因为我们有 2 条“正在运行”消息和只有 1 条“已完成”消息。我将研究断点,看看这是否有帮助。

标签: java android android-activity android-lifecycle oncreate


【解决方案1】:

我猜这是一个复制粘贴错误,检查你的 HubActivity.onCreate(),如果你没有意外粘贴

Const.err("##> Running PlayerSearchActivity.onCreate");

而不是

Const.err("##> Running HubActivity.onCreate");

【讨论】:

  • 不幸的是,这不是问题所在。我确实检查了多次(以前犯过这个错误)。我在这里遇到了奇怪的小问题..
  • 可以尝试添加 Const.err("##> 内容设置在 PlayerSearchActivity.onCreate");就在 setContentView(R.layout.activity_playersearch);看看能不能打印出来?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
相关资源
最近更新 更多