【问题标题】:onNewIntent called after finish() executed在完成()执行后调用 onNewIntent
【发布时间】:2014-07-09 14:19:07
【问题描述】:

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

有没有人遇到过这种情况,有没有简单的解决办法?

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

如果finish() 使用onCreate 会更简单。

感谢您的任何意见。

【问题讨论】:

  • 根据我的日志,finish() 执行和 onNewIntent 之间有几百毫秒的差距。
  • 我从您的评论中假设您认为下一个意图应该在完成()执行后通过 onCreate 来实现?
  • 那么你的Activity是什么时候从栈顶移除的,finish()是在什么时候执行的,还是在onDestroy执行之后呢?如果是后者,那就是糟糕的设计。
  • 在这两种情况下,Activity 都会从堆栈顶部移除。也许你应该尝试不同的方法。

标签: android


【解决方案1】:

我会向你解释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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 2014-06-10
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    相关资源
    最近更新 更多