Activity和Task

Task的概念

        A task is a stack of activities. Task 就是一个栈,这个栈里面存放了很多 Activity ,它遵循着后进先出的原则。在一个应用程序中用户先后打开的Activity先后进入Task

    看一个例子:创建一个Android应用程序,这个应用程序中有三个ActivityActivity01Activity02Activity03。每一个Activity中都有一个TextView控件和Button控件。点击Activity01中的Button按钮会跳转到Activity02,点击Activity02中的Button按钮会跳转到Activity03

    Activity和Task_第1张图片

    Activity和Task_第2张图片

    Activity和Task_第3张图片

    运行应用程序,最先显示Activity01Activity01被压入Task栈中,点击Button之后显示Activity02Activity02被压入栈中,再点击Activity02Button按钮显示Activity03Activity03被压入栈中。与用户交互的Activity永远是位于栈顶的那个Activity

        Activity和Task_第4张图片

    当我们点击Back键时,Task栈中的Activity03出栈显示,Activity02,再点击BackActivity02退出栈,RestartActivity01,再点击Back键,Activity01对象出栈,Task栈为空,应用程序退出。

        

    如果在 Activity02 中的 startActivity(intent) 后调用 finish() 方法。将程序运行到 Activity03 后,点击 Back 按钮,此时,程序并没有返回到 Activity02 ,而是直接返回到 Activity01 原因:由于在点击 Activity02 的按钮之后,它启动了 Activity03 ,同时将 Activity02 销毁掉了,这个时候栈里面只有 Activity03 Activity01 ,当再点击 Back 的时候它就不是回到 Activity02 而是回到 Activity01 了。

以对话框显示Activity

         Activity可以以对话框的形式显示,这个时候前一个Activity没有被完全遮挡,因此对用户来说仍然是可见的,但是没有获得焦点,所以用户不能与前一个Activity进行交互。以对话框的形式显示Activity很简单,在Maifest.xml文件中注册Activity时把Activity的属性加上  android:theme="@android:style/Theme.Dialog就可以了。

如:

          <activity android:name=".Activity03" android:label="Activity03" android:theme="@android:style/Theme.Dialog" />

这样Activity03就以对话框的形式显示了。需要注意的是Activity03不以对话框的形式显示时,从Activity02跳转到Activity03时依次调用Activity02.OnPause()->Activity03.OnCreate()->Activity03.start()->Activity03.resume()->Activity02.stop()等方法,而以对话框形式显示时依次调用Activity02.OnPause()->Activity03.OnCreate()->Activity03.start()->Activity03.resume(),不再调用Activity02.stop()方法,因为Activity02没有被完全遮挡,对用户来说是可见的。

     Activity和Task_第5张图片

你可能感兴趣的:(android,button)