【问题标题】:Understanding android activity lifecycle了解 android 活动生命周期
【发布时间】:2013-10-21 14:04:43
【问题描述】:

我的 android 活动的生命周期有问题。当我按下“home”按钮时,函数 onDestroy() 正在调用。 我测试了一个简单的 hello world 和 Toast 回调函数。

我的代码:

    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
Toast.makeText(getApplicationContext(), "onCreate", Toast.LENGTH_SHORT).show();
}

    @Override
    protected void onRestart(){
        super.onRestart();
Toast.makeText(getApplicationContext(), "onRestart", Toast.LENGTH_SHORT).show();
    }

    @Override 
    protected void onStart(){
        super.onStart();
Toast.makeText(getApplicationContext(), "onStart", Toast.LENGTH_SHORT).show();
    }

    @Override 
    protected void onResume(){
        super.onResume();
Toast.makeText(getApplicationContext(), "onResume", Toast.LENGTH_SHORT).show();
    }
    @Override 
    protected void onStop(){
        super.onStop();
        Toast.makeText(getApplicationContext(), "onStop", Toast.LENGTH_SHORT).show();
    }
    @Override
    protected void onDestroy(){
    super.onDestroy();
Toast.makeText(getApplicationContext(), "onDestroy", Toast.LENGTH_SHORT).show();
}
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

编辑:当我运行我的应用程序时,我有吐司“onCreate”,“onState”然后是“onResume。如果我按“home”按钮,我会看到吐司“onStop”。如果我返回我的应用程序,我有吐司“onStart”和“onResume”。 但是当我在我的真实设备(Samsung GT-P3110)上运行我的应用程序时,我有吐司“onCreate”、“onState”然后是“onResume”。如果我按“home”按钮,我会看到吐司“onStop”和“onDestroy” . (我的应用程序始终在正在运行的应用程序列表中可见)如果我返回应用程序,它会看到“onCreate”-> onState”->“onResume”,就像它完全重启一样。

我不明白。 可以请教一下吗?

【问题讨论】:

标签: android android-activity activity-lifecycle


【解决方案1】:

Activity 代表您在应用运行时在手机上看到的屏幕,如果该屏幕消失,则您的 Activity 被销毁。

有关信息,请参阅本教程:

http://developer.android.com/training/basics/activity-lifecycle/starting.html

您可以阅读有关此内容的更多信息并运行活动 apk 示例,它将帮助您了解它的工作原理。 (点击下载演示并在某个地方运行它,在虚拟机或手机上)

【讨论】:

  • 感谢您的回答。当活动为 Destroy 时,我了解 onDestroyed。但我的问题是这种情况:“在某些情况下,活动只会在金字塔下移动一部分并等待(例如当用户切换到另一个应用程序时),活动可以从这一点移回顶部(如果用户返回活动)并从用户离开的地方继续。”就我而言,如果我切换到另一个应用程序,我的应用程序调用“onDestroy”。我已经检查了虚拟设备,我的行为很好。问题只是针对我的真实设备(三星 Galaxy Tab GT-P3110)。
  • 这可能是由于您的 AVD 版本和真实版本之间的差异,或者配置,据我所知,无论如何都必须调用 ondestroy,也许三星在他们的软件中改变了一些东西,无论如何,如果你想要恢复您上次离开时​​的应用程序,您可以实现 onSaveInstanceState() 来保存您的数据,并在您的应用程序再次创建时实现 onRestoreInstanceState() 来恢复它们。
  • 好的。谢谢你的回答
  • 其实我的问题出在参数上。选中“用户退出时删除每个活动”复选框(在开发选项上)
【解决方案2】:

您的活动在停止时实际上已被销毁,摘自here

注意:系统在所有情况下都调用 onDestroy() 之后调用了 onPause() 和 onStop(),但以下情况除外:

此实例中的“除一个”不适用于您,仅当从 onCreate() 方法调用 finish() 时才适用。其余摘录在上面链接的页面底部。

【讨论】:

    【解决方案3】:

    除了下面的cmets,你可以用方法来区分BACK和HOME键:

    void onSaveInstanceState(Bundle outState)
    

    当您按下 HOME 按钮而不是 BACK 按钮时调用。

    【讨论】:

      猜你喜欢
      • 2019-04-17
      • 1970-01-01
      • 2013-01-13
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      相关资源
      最近更新 更多