如果一个活动是由一个监听器创建的,那么该监听器就会被销毁,该任务会发生什么?

时间:2015-03-03 16:34:32

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

我有一个Android磨损类,它扩展了WearableListenerService并且正在创建一个活动。文档说明了创建活动时的活动和任务:

  

默认情况下,新活动会启动到活动的任务中   这叫做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
<磷>氮

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

通常我可以使用FLAG_ACTIVITY_CLEAR_TOP,FLAG_ACTIVITY_SINGLE_TOP等。 但是,由于在第3阶段调用了WearableListenerService onDestroy(),这是否意味着在第4阶段创建了一个新任务,因此这些标志没有效果?

我该如何试验?是否有一种编程方式可以找出活动所在的任务的识别?

1 个答案:

答案 0 :(得分:0)

  

然而,在第3阶段调用了WearableListenerService onDestroy()   这是否意味着在第4阶段创建新任务,从而创建这些任务   标志没有效果?

如果您使用的是android:launchMode =“singleTop”

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

请在您的活动中使用onNewIntent()方法进行检查。

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

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