您的位置:首页 > 移动开发 > Android开发

Android Tasks and Back Stack (一)

2011-06-21 16:32 246 查看
前几天遇到LogOut一次性不成功的问题!最后发现问题在!从第二个activity回到前面的activity时,使用了 StartActivity(new Intent(...)),这种方式默认是新创建已Activity实例,加入到栈顶,就会导致 有重复的activty,所以要退两次 才能成功。比如我一个应用程序myApp,4个activity: LoginActivitty(登录界面),HomeActivity(主界面),NoticeListActivity(公告列表界面),NoticeDetailActivity(公告详情界面),流程如下

在login界面登录时使用:

startActivity(new Intent(LoginActivity.this, HomeActivity.class));

Task stack:

| |

|LoginActivity |

-------------------

在Home界面进公告列表示时使用:

startActivity(new Intent(HomeActivity.this, NoticeListActivity.class));

Task stack:

|HomeActivity |

|LoginActivity |

-------------------

在列表界面进详情时使用:

startActivity(new Intent(NoticeListActivity.this, NoticeDetailActivity.class));

Task stack:

|NoticeListActivity |

|HomeActivity |

|LoginActivity |

------------------------

在列表详情时:

startActivity(new Intent(NoticeListActivity.this, NoticeDetailActivity.class));

Task stack:

|NoticeDetailActivity |

|NoticeListActivity |

|HomeActivity |

|LoginActivity |

------------------------

而这时如果我想当用户点击HomeButton(自定义) 按钮时要回到HomeActivity, 如果还是用:startActivity(new Intent(NoticeDetailActivity.this, HomeActivity.class));大家都知道出现如下效果,即两个

HomeActivity,在堆栈中:

|HomeActivity |

|NoticeDetailActivity |

|NoticeListActivity |

|HomeActivity |

|LoginActivity |

------------------------

这个时候用户单击系统自带Back按钮时 就会出现两次HomeActivity,虽然按正常来说是没什么的,因为我只是想返回到上一个点击的界面。但是有的时候是 当我在HomeActivity中时,点击back 按钮必须跳转到Login界面(即logOut).那么就有问题了!当然你也可以再启动LoignActivity,并且清空当前Task 堆栈。

但是我想说的 有简单的方式,

<!-- 主界面 -->

<activity android:name=".activity.HomeActivity"

android:windowSoftInputMode="adjustPan" android:screenOrientation="portrait"

android:launchMode="singleTask"

>

使用android:launchMode="singleTask",即启动模式使用“singleTask”,即同时只有一个实例存在于手机中,当这个实例已经存在了,就不会新创建实例,而调用该实例的 onNewIntent(),并显示,并且会清空他上面的历史堆栈记录,

如当用户点击HomeButton(自定义) 按钮时要回到HomeActivity, 还是用:startActivity(new Intent(NoticeDetailActivity.this, HomeActivity.class));但是这时我们设置了android:launchMode="singleTask" 在manifest.xml中,

那么这个时候Task堆栈就变成了

|HomeActivity |

|LoginActivity |

------------------------

而不是

|HomeActivity |

|NoticeDetailActivity |

|NoticeListActivity |

|HomeActivity |

|LoginActivity |

------------------------ 这个时候你在HomeActivity 中点击系统的back 键时就能保证,每次都会到loginActivity。

我今天测试发现一个问题,android:launchMode="singleTask"并不是新创建一个新Task ,而还是加入到原来的Task 堆栈中,但是android:launchMode="singleInstance"会创建一个新Task ,里面有且只有该activity.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: