在执行finish()后调用onNewIntent

时间:2014-07-08 18:34:57

标签: android

我有一个由粘性服务和单独的SINGLE_TOP活动组成的应用程序。该服务从服务器接收消息,然后使用startActivity(intent)启动Activity。当用户解除所有消息后,我使用finish()终止Activity。我受到了印象,从我的研究开始,所有其他人一旦完成()已经执行了任何后续的startActivity(intent)调用将来自onCreate而不是onNewIntent。但是,如果我在确切的时间发送新消息,我会解除最后一条消息(尽管很少),在完成()执行后但在onDestroy之前看到onNewIntent。

有没有人遇到过这种情况并且有一个简单的解决方案吗?

我正在考虑的解决方案是: 1.告诉服务活动在执行完成之前停止() 2.等待服务确定。 3.然后,服务将对任何消息进行排队,直到通知活动已停止 4.让onDestroy活动通知它已经停止的服务 5.服务将发送任何队列消息。

如果finish()获得了onCreate,那将会更加简单。

感谢您的任何意见。

1 个答案:

答案 0 :(得分:0)

我会向您解释singleTop

考虑活动A,B和C.我们假设B是singleTop,其他两个是standard。所以这就是堆栈的外观。

A -> B -> C -> B -> new Instance of B will be created

A -> B -> C -> B -> B -> onNewIntent() called, new Instance of B is NOT created

finish()依次调用onDestroy(),因此在这两种情况下,您的活动都会从堆栈顶部移除。

也许在你的情况下,这种情况正在发生:

A -> B -> C -> finish() -> B -> onNewIntent() called

A -> B -> C -> B -> finish() -> finish() -> B -> onNewIntent() called