大家好。我写了个程序,两个界面activity01和antivity02,让它们简单互换界面。在activity01中使用Intent并调用startActivity(Activity01.this,Activity02.class)【常用的调用方法】,然后在Activity02中调用startActivity(Activity02.this,Activity01.class)【在两个Activity中都没有显示的调用finish()销毁它】,发现每次调用Activity都是从onCreate()开始的,为什么不是从onRestart()开始呢?从Log中看到,程序并没有调用过onDestory(),只是调用了onStop().   按back键的时候,发现原来在栈中存着好多个Activity,每调一次startActivity()就会生成一个Activity,并把当前的Activity压在栈下,新生成的Activity在栈顶,如此往复。  能不能这样理解:startActivity是又生成了一个Activity,而并不是把前面压在栈底的那个Activity给掉出来????   如果我想调用栈下面的那个Activity该用什么方法呢?两个Activity来回调用,或者多个Activity需要来回调用,有没有更好的办法呢?  注意,我不想把Activity给finish掉。

解决方案 »

  1.   

    Activity有四种加载模式,Activity有四种加载模式:    * standard
        * singleTop
        * singleTask
        * singleInstance
    要在XML中设置,设置代码为<activity android:name="ActB" android:launchMode="singleTask"></activity>
    默认的加载模式就是standard,也就是说每次你加载的时候都会在栈中创建一个新的Activity对象,所以你看到的就是这种现象。
    singleTop :singleTop和standard模式,都会将intent发送新的实例(后两种模式不发送到新的实例,如果已经有了的话)。不过,singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例
    singleTask:
    singleTask模式和后面的singleInstance模式都是只创建一个实例的。当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。
    singleInstance:
    这个有点麻烦,你baidu下吧
      

  2.   

    所以,如果你想实现只有一个无论怎么切换栈中只有一个Activity的话,就在XML中设置成* singleTask
      * singleInstance这两种模式。
      

  3.   

    谢谢解答。   以前我都是用默认的方式。最近做项目发现了这个问题。呵呵。我再去看看这方面的知识。Activity这块需要了解的内容还是蛮多的。
      

  4.   


    你好:你可以去看看Activity有四种加载模式。只需要manifest文件中设置相关Activity:launchdMode就行了。
    <activity android:name="com.g4vision.main.MenuActivity"
               android:label="@string/Menu_Name"
               android:launchMode="singleTask"
            ></activity>
    修改android:launchMode=“你需要的加载模式”就可以。
      

  5.   


    LZ,这个问题这样能解决,可是如果按了HOME键之后返回时就只显示设置了单例模式(SingleTask)的那个Activity了。