摘录自Google API客户文档,
public GoogleApiClient.Builder enableAutoManage (FragmentActivity
fragmentActivity, GoogleApiClient.OnConnectionFailedListener
unresolvedConnectionFailedListener)
在支持库中实现自动生命周期管理在onStart()中连接客户端并断开连接的FragmentActivity它位于onStop()中。
它适当地处理用户可恢复的错误并调用上的onConnectionFailed(ConnectionResult)如果ConnectionResult没有决议这消除了与使用GoogleApiClient。
虽然这听起来有点天真,但我的问题是,这是否是我们用onStart
方法启动GoogleAPIClient连接的重要步骤?如果我改为在onCreate
中进行连接,会有什么害处吗?我在多个场景中看到,由于遗留代码的原因,需要连接到onCreate
中的googleApiClient。我也尝试过在onCreate中建立连接,这很有效(我没有看到任何崩溃)。这是个坏主意吗?那么,为什么在onStart
中启动连接并在onStop
中停止连接是必要的或重要的呢?
您可以参考这个线程:onStart()到底做什么?-安卓
活动从停止状态恢复时调用
onStart()
。例如,如果您有活动A并从中启动活动B,则活动A将暂停(onPause()
),然后停止(onStop()
)并移到后堆栈。之后,如果按Back进入活动B,B将暂停(onPause()
)、停止(onStop()
)和销毁(onDestroy()
),活动A将从后堆栈恢复、启动(onStart()
)和恢复(onResume()
)。正如您所看到的,系统不会再次调用onCreate()
进行A。如何使用
onStart()
?例如,您应该在onStop()
中注销GPS、传感器等的侦听器,然后在onStart()
中再次注册。如果您在onCreate()
中注册并在onDestroy()
中注销,则GPS服务将始终工作,并且会耗尽电池电量。
还指出,onStart()
的主要作用是在暂停后调用活动。如果调用了onCreate()
,那么所有的初始化都应该再次进行,通过使用onStart()
,我们可以初始化那些在onstop()
中未初始化的东西。
将代码从onStart
移动到onCreate
会导致问题。例如,一个应用程序使用定位服务在地图上显示位置。这是一个行为良好的应用程序,当用户不再使用该应用程序时,它将停止使用位置服务onStop
。
- 用户启动应用程序(
onCreate
、onStart
) - 用户离开(
onStop
) - 用户在应用程序被销毁之前返回应用程序(
onStart
,但不是onCreate
)
如果仅在onCreate
上连接,则意味着在步骤#3之后未连接应用程序。用户将在没有正确功能的情况下使用该应用程序,因为返回应用程序时可能不会调用onCreate
。