android活动生命周期函数的基础知识

时间:2013-08-20 01:35:52

标签: android android-activity android-lifecycle activity-lifecycle

我正在测试此代码,该代码显示活动在哪个州

public class Activity101Activity extends Activity {
    String tag  =  "Lifecycle";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
        // setContentView(R.layout.main);
        setContentView(R.layout.activity_activity101);
        Log.d(tag , "In the onCreate() event");
    }
    public void onStart()
    {
        super.onStart();
        Log.d(tag , "In the onStart() event");
    }

    public void onRestart()
    {
         super.onRestart();
        Log.d(tag , "In the onRestart() event");
    }

    public void onResume()
    {
         super.onResume();
        Log.d(tag , "In the onResume() event");
    }

    public void onPause()
    {
         super.onPause();
        Log.d(tag , "In the onPause() event");
    }

    public void onStop()
    {
         super.onStop();
        Log.d(tag , "In the onStop() event" );
    }

    public void onDestroy()
    {
         super.onDestroy();
        Log.d(tag , "In the onDestroy() event");
    }
}  

所以我看到onDestroy()仅在活动在屏幕上时按下后退按钮时被调用,否则从不调用。因此,如果我在活动运行时按下主页按钮,它应该在后台运行。但是,如果我转到Settings -> Apps -> Running,我就无法在列表中看到它。那么这是否意味着它在后台运行?

同样,再次,此代码显示onPause()始终跟随onStop(),onStart()后跟onResume()。那么为什么它们在Android环境中被定义为不同的功能而没有合并?

4 个答案:

答案 0 :(得分:3)

在这里,我为您提供活动生命周期的biref概念......

enter image description here

的onCreate():

  

首次创建活动时调用。这是您应该执行所有常规静态设置的地方:创建视图,将数据绑定到列表等。此方法还为您提供包含活动的先前冻结状态的Bundle(如果有)。始终紧跟onStart()。

onRestart():

  

在您的活动停止之后,再次启动之前调用。始终紧跟onStart()

在onStart():

  

当活动对用户可见时调用。如果活动到达前台,则按onResume(),如果隐藏,则按onStop()。

的onResume():

  

当活动开始与用户交互时调用。此时,您的活动位于活动堆栈的顶部,用户输入转到活动堆栈。始终跟随onPause()。

onPause():

  

当活动进入后台但被(但)尚未被杀死时,被称为活动生命周期的一部分。 onResume()的对应部分。当活动B在活动A前面启动时,将在A上调用此回调。在A的onPause()返回之前不会创建B,所以一定不要在这里做任何冗长的事情。

的onStop():

  

当您不再对用户可见时调用。您接下来将收到onRestart(),onDestroy()或什么都没有,具体取决于以后的用户活动。

     

请注意,在内存不足的情况下,可能永远不会调用此方法,在这种情况下,系统没有足够的内存来保持活动的进程在调用onPause()方法后继续运行。

的onDestroy():

  

在您的活动被销毁之前收到的最后一个电话。这可能是因为活动正在完成(有人在其上调用finish(),或者因为系统暂时销毁此活动实例以节省空间。您可以使用isFinishing()方法区分这两种情况。

当活动进入前台时没有用户交互的情况下调用..onStart方法调用...当用户开始交互时onResume方法调用...所以所有方法的功能都不同......

一旦你按下主页按钮或后退按钮你的应用程序在后台运行,一旦你从任务管理器中杀死它,它将在设置中显示任何内容......

答案 1 :(得分:2)

onStart 始终后跟onResume。当您的活动可见时调用onStart,并在您的活动处于活动状态时调用onResume。例如,如果有一个部分覆盖它的对话框,则活动可以显示但不活动。

答案 2 :(得分:2)

活动进入后台时,它处于暂停模式。所以你在运行应用程序列表中看不到它。一旦你重新启动这样的暂停应用程序,它就会从backstack进入前台并开始运行。它被保留在后台以保持其状态,并在进入后台之前从停止的地方恢复。

要了解原因,在onResume之前需要onStart,请点击以下链接。它会清楚地清除你所有的疑惑:

Difference between onStart() and onResume()

答案 3 :(得分:1)

多数民众赞成'因为即使onResume实际上也有可能无法调用onStart,有一种情况是活动可能只进入onPause而不进入onStop [仅当活动部分可见时才会被发生,而不是完全覆盖通过另一个活动],因此当回到活动时,只会调用onResume而不是onStart。

与onPause相同,它总是在onStop之前执行,但是在onPause之后可能不会调用onStop,如前所述,可以在没有实际调用onStop的情况下调用它。如果您按HOME,您将看不到我刚才解释的行为,因为活动不是部分可见,为了重现它,你必须找到一种方法让另一个组件在不完全覆盖活动的情况下出现...

希望这有帮助。

问候!