想知道正确使用taskAffinity& launchModes?

时间:2009-09-28 10:05:30

标签: java android mobile

我的Android应用包含一套迷你应用。简而言之,主屏幕包含几个图标,每个图标用于迷你应用程序。单击图标时,将启动迷你应用程序。 我总共有4个迷你应用程序。所以你可以想象我的主屏幕就像主屏幕启动器。虽然这些迷你应用程序可以独立运行,但我希望用户进行身份验证。因此,在MainActivity之前有一个LoginActivity。

LoginActivity -> MainActivity ---> AppOneActivity
                              ---> AppTwoActivity
                              ---> AppThreeActivity
                              ---> AppFourActivity (aka PresenceListActivity)

我仍然不太确定任务(安排的活动集)的好处,所以我希望Android专家对我的设计决策发表评论: -

(1)我计划将 LoginActivity 的属性 finishOnTaskLaunch 设置为true。据我了解,登录验证后,我会将用户导航到 MainActivity ,我希望 LoginActivity 消失。这比调用Activity上的 #finish 更好吗? MainActivity会在没有任何额外配置/代码的情况下自动成为Task的根目录吗?

(2)迷你应用程序之一是IM客户端。 PresenceListActivity 将托管 ChatActivity 的多个实例(与该列表中的活动联系人进行一对一聊天会话)。我计划使用 ChatActivity 的默认启动模式,因为每个聊天都应由新实例处理。听起来不错?

(3) AppOneActivity AppTwoActivity 等的顶角会出现一个粘性导航栏。我打算设置 clearTaskOnLaunch 对于所有这些属性,属性为true。根据我的理解,每当我计划启动任何迷你应用程序时,我都应该清除堆栈。他们的 launchModes 也将是 singleTask 。我在正确的道路上吗?

(4)最后我真的不明白如何阅读 adb shell dumpsys活动的输出。例如

Task{10 com.me.rnd.exit}
clearOnBackground=false numActivities=1
affinity=com.me.rnd.exit
lastActiveTime=5513102 (inactive for 5s)
  History #1: .....

Task{2 com.android.launcher}
clearOnBackground=true numActivities=1 rootWasReset=true
affinity=com.android.launcher
lastActiveTime=5512949 (inactive for 6s)
  Running #0:

有时在任务下方,您会看到历史,而在其他正在运行,这些是什么意思?更奇怪的是,有时我在任务中有两个历史

1 个答案:

答案 0 :(得分:0)

  

(1)我计划将LoginActivity的属性finishOnTaskLaunch设置为true。据我所知,登录验证后,我会将用户导航到MainActivity,我希望LoginActivity消失。这比在活动上调用#finish更好吗? MainActivity会在没有任何额外配置/代码的情况下自动成为Task的根目录吗?

我建议从一开始就将MainActivity作为根活动。

首先,MainActivity将创建LoginActivity或LoginDialog,并将结果返回给MainActivity。

这样您就不必弄清楚如何将MainActivity从子活动移动到root活动。

但是,如果这会过多地干扰您的代码,请不要考虑我的建议。

干杯,

约瑟夫