大家好。我写了个程序,两个界面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掉。
* 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下吧
* singleInstance这两种模式。
你好:你可以去看看Activity有四种加载模式。只需要manifest文件中设置相关Activity:launchdMode就行了。
<activity android:name="com.g4vision.main.MenuActivity"
android:label="@string/Menu_Name"
android:launchMode="singleTask"
></activity>
修改android:launchMode=“你需要的加载模式”就可以。
LZ,这个问题这样能解决,可是如果按了HOME键之后返回时就只显示设置了单例模式(SingleTask)的那个Activity了。