【问题标题】:If an activity is created by a listener, then the listener is destroyed, what happens to the task?如果一个活动是由一个监听器创建的,那么这个监听器就被销毁了,这个任务会发生什么?
【发布时间】:2015-03-03 16:34:32
【问题描述】:

我有一个扩展 WearableListenerService 的 Android 穿戴类,它正在创建一个活动。文档在创建活动时对活动和任务进行了说明:

默认情况下,新活动会启动到活动的任务中 调用 startActivity()。

因此,我的活动被添加到 WearableListenerService 任务中。

我无法控制 WearableListenerService 的生命周期——只要手机向可穿戴设备发送消息,操作系统就会调用其 onCreate() 和 onDestroy() 方法。

我的问题是在这种情况下会发生什么:

1) WearableListenerService onCreate() gets called
2) WearableListenerService onMessageReceived() gets called and the WearableListenerService starts a new activity
3) WearableListenerService onDestroy() gets called, but the activity is still present
4) WearableListenerService onCreate() gets called again
5) WearableListenerService onMessageReceived() gets called again and the activity is started agai

n.

在 5) 处,如果 2) 中的活动仍然存在,那么我不想创建一个新的单独活动,我总是想要一个单例活动。

通常我可以使用 FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_SINGLE_TOP 等。 然而,在第 3 阶段调用 Wea​​rableListenerService onDestroy())是否意味着在第 4 阶段创建了一个新任务),因此这些标志无效?

我该如何进行实验?是否有一种程序化的方式来找出活动所在任务的标识?

【问题讨论】:

    标签: android android-intent android-activity wear-os android-lifecycle


    【解决方案1】:

    然而,WearableListenerService onDestroy() 在第 3 阶段被调用) 这是否意味着在第 4 阶段创建了一个新任务),因此这些 flags 没有效果?

    如果你正在使用,android:launchMode="singleTop"

    如果当前任务的顶部已经存在一个活动实例并且系统将意图路由到该活动,则不会创建新实例,因为它将触发onNewIntent() 方法而不是创建新对象。

    所以请检查您的活动中的onNewIntent() 方法。

    更具体地说,您的应用程序任务只有在您的应用程序没有任何实例运行时才被销毁或清除,任何活动或服务或系统都需要内存以防内存不足的情况。

    同样,您也可以使用android:launchMode="singleTask" 在单独的任务中启动 Activity。因此,您的活动始终从新任务开始,并与 singleTop 结合始终保持在顶部,因此您可以从之前的状态恢复而不是再次创建它。

    【讨论】:

    • 在我的情况下,任务堆栈上的根活动是什么?该活动不是由另一个活动创建的,它是由侦听器创建的,因此它是根活动(如果只有一个活动,它必须是?)
    • 您的活动中不需要root Activity。根活动是您唯一一个将从侦听器开始的活动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2023-03-17
    • 2013-11-20
    • 1970-01-01
    相关资源
    最近更新 更多