onCreate 与 onStart 中的 GoogleAPIClient 连接

Posted

技术标签:

【中文标题】onCreate 与 onStart 中的 GoogleAPIClient 连接【英文标题】:GoogleAPIClient Connection in onCreate vs onStart 【发布时间】: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 中停止连接是必要或重要的呢?

【问题讨论】:

【参考方案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

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

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

【讨论】:

感谢@mattm 的回复。但是,如果您说自己处理连接,它不会引起任何问题吗?这只是建议正确而不是必须做对吗?在异常等中运行? @Ahmed 在我提供的示例中,应用程序不会崩溃但无法运行。即使您自己管理连接也会发生这种情况。 那么完美的解决方案是什么?单独说明:EnableAutoManage 似乎也不稳定。

以上是关于onCreate 与 onStart 中的 GoogleAPIClient 连接的主要内容,如果未能解决你的问题,请参考以下文章

AndroidX 迁移后,ListView 未在 OnCreate/OnStart 上显示任何数据

如果在 Activity 更改时调用 onCreate 和 onStart 两者之间的区别在哪里?目的是啥?

Android生命周期与Intent笔记

activity的生命周期

ListView 与 CoordinatorLayout 中的 SearchView 重叠

Android查缺补漏--Activity生命周期和启动模式