【问题标题】:GoogleAPIClient Connection in onCreate vs onStartonCreate 与 onStart 中的 GoogleAPIClient 连接
【发布时间】:2018-04-19 06:15:09
【问题描述】:

摘自Google API Client documentation,

public GoogleApiClient.Builder enableAutoManage (FragmentActivity
fragmentActivity, GoogleApiClient.OnConnectionFailedListener
unresolvedConnectionFailedListener)

在支持库中启用自动生命周期管理 在 onStart() 中连接客户端并断开连接的 FragmentActivity 它在 onStop() 中。

它适当地处理用户可恢复的错误并调用 onConnectionFailed(ConnectionResult) 在 unresolvedConnectionFailedListener 如果 ConnectionResult 没有 解决。这消除了与 使用 GoogleApiClient。

虽然听起来有点幼稚,但我的问题是,这是否是我们在 onStart 方法中开始连接 GoogleAPIClient 的重要步骤?如果我改为在onCreate 中建立连接,会有什么危害吗?由于遗留代码,我有多个场景需要连接到onCreate 中的 googleApiClient。我也尝试在 onCreate 中建立连接并且有效(我没有看到任何崩溃)。这是个坏主意吗?那么为什么在onStart 中启动连接并在onStop 中停止连接是必要或重要的呢?

【问题讨论】:

    标签: java android google-play-services google-api-client android-googleapiclient


    【解决方案1】:

    你可以参考这个帖子:What does onStart() really do? - Android

    onStart() 在活动从停止状态恢复时被调用。例如,如果您有活动 A 并从中启动活动 B,则活动 A 将暂停 (onPause()) 然后停止 (onStop()) 并移至后退堆栈。在此之后,如果您按 Back 进入您的活动 B,B 将被暂停(onPause())、停止(onStop())和销毁(onDestroy()),并且活动 A 将从后堆栈恢复,启动(@987654329 @) 并恢复 (onResume())。可以看到,系统不会再为A调用onCreate()。

    如何使用onStart()?例如,您应该在onStop() 中取消注册 GPS、传感器等的侦听器,然后在 onStart() 中再次注册。如果您在onCreate() 注册它并在onDestroy() 注销它,那么 GPS 服务将一直工作,它会耗尽电池。

    还有人说onStart()的主要作用是在activity被暂停后调用的时候。如果onCreate()被调用,那么所有的初始化都应该重新进行,通过使用onStart()我们可以初始化那些在onstop()中没有初始化的东西。

    【讨论】:

      【解决方案2】:

      将代码从onStart 移动到onCreate 会导致问题。举个例子,一个使用位置服务在地图上显示位置的应用程序。这是一个行为良好的应用程序,当用户不再使用该应用程序时,它会停止使用定位服务onStop。

      1. 用户启动应用程序(onCreate,onStart)
      2. 用户离开 (onStop)
      3. 用户在应用程序被销毁之前返回应用程序(onStart,但不是onCreate)

      如果您仅在onCreate 上连接,这意味着在第 3 步之后应用程序未连接。用户将在没有正确功能的情况下使用应用程序,因为在返回应用程序时可能不会调用 onCreate。

      【讨论】:

      • 感谢@mattm 的回复。但是,如果您说自己处理连接,它不会引起任何问题吗?这只是建议正确而不是必须做对吗?在异常等中运行?
      • @Ahmed 在我提供的示例中,应用程序不会崩溃但无法运行。即使您自己管理连接也会发生这种情况。
      • 那么完美的解决方案是什么?单独说明:EnableAutoManage 似乎也不稳定。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      相关资源
      最近更新 更多