【问题标题】:The onPause() method gets called between activitiesonPause() 方法在活动之间被调用
【发布时间】:2020-11-21 19:06:09
【问题描述】:

我在我的应用程序中使用 onPause() 方法,以便在应用程序暂停时用户在我的聊天中变得“离线”。我发现它非常有用。

但问题是,每次用户在活动之间导航时,都会调用该方法,就像毫秒一样。这样,用户在活动 A 中“在线”,在 B 中“在线”,但介于两者之间。

因为我用一个绿点来描述在线用户,所以很烦人,因为它每次都变成灰色然后又变成绿色。

有没有办法防止这种情况发生?

【问题讨论】:

  • 我会使用单个活动,并在该活动中为不同的屏幕使用片段。

标签: kotlin onpause


【解决方案1】:

onPauseActivity 生命周期 的一部分,它与 Activity 所经历的不同状态有关 - 这与您的应用程序作为一个整体是否在后台无关。 Here's what the docs say about it

系统调用此方法作为用户的第一个指示 正在离开您的活动(尽管这并不总是意味着活动正在被破坏);它表明活动不再在前台(尽管如果用户处于多窗口模式,它可能仍然可见)。

有几种方法可以处理它 - 最简单的方法是在切换到活动 B 时设置 navigating 标志。然后 onPause 可以检查该标志,并跳过将您设置为如果有导航,则离线。


我假设您的意思是 other 用户的点正在闪烁(因为如果您是在活动之间切换的人,您不会看到相同的 View) - 它可能实际上,让应用每隔一段时间发送一次“我在线”ping 确实是个好主意。

这样,如果用户在一定时间后没有收到消息,他们可以将其设置为离线 - 这只是意味着如果用户出现崩溃、网络中断或其他情况,他们不会看起来在线一直只是因为他们没有通过onPause发送“我现在离线”消息

【讨论】:

  • 实际上标记听起来是最好的解决方案,因为数据更改(到离线)也会触发 onDatchange() 方法。您能否告诉我标记活动 A 到 B 之间的运动的最佳做法是什么?
  • 我的意思是在您调用startActivity(或您正在执行的任何操作)导航到ActivityB 之前,将var navigating = false 设置为true。如果onPause 在设置在线状态之前检查,它知道是否跳过这样做
猜你喜欢
  • 2014-06-02
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
相关资源
最近更新 更多