我正在挖掘GitHub android 应用程序源代码。
我试图找出他们如何LoginActivity
在应用程序首次启动时强制显示。在它们的清单中,它们似乎HomeActivity
是 MAIN并且LoginActivity
仅被明确启动。
这意味着它总是HomeActivity
在应用程序首次打开时启动。但是,我在HomeActivity 中看不到任何逻辑表明他们检查帐户是否存在,如果不存在则转到LoginActivity
在代码LoginActivity
中只从这里启动。
我正在挖掘GitHub android 应用程序源代码。
我试图找出他们如何LoginActivity
在应用程序首次启动时强制显示。在它们的清单中,它们似乎HomeActivity
是 MAIN并且LoginActivity
仅被明确启动。
这意味着它总是HomeActivity
在应用程序首次打开时启动。但是,我在HomeActivity 中看不到任何逻辑表明他们检查帐户是否存在,如果不存在则转到LoginActivity
在代码LoginActivity
中只从这里启动。
好的,整个Android账号认证和同步适配器机制乍一看可能比较复杂,GitHub Android app在那里又增加了一层复杂性,但我会尝试向您解释整个流程(希望我的理解是正确的) .
首先,如果您还不熟悉该主题,我会向您推荐这篇关于 Android Authenticator 的文章。GitHub Android 使用该文章中描述的完全相同的机制。
你是对的,HomeActivity
是先启动的。然后它启动OrganizationLoader以加载组织列表。该加载程序调用方法,OrganizationService
该方法是GitHub Java API的一部分。GitHub Android 用于RoboGuice
配置注入最常用的类,如 GitHub API 服务。您可以看到在ServicesModule中创建了 OrganizationService 。它GithubClient
作为构造函数参数,还有一个GitHubModule配置为在需要实例时返回AccountClientGitHubClient
。
AccountClient
覆盖configureRequest()
方法并调用
String token = account.getAuthToken();
这是GitHubAccount类的一个方法,它从内部 Android 的AccountManager
. 并且AccountManager
配置为使用您谈到的AccountAuthenticatorLoginActivity
,如果设备上没有帐户,它将返回意图。
希望这可以帮助 :)
该应用程序使用的是Android帐户系统,该系统实际上是在您已经找到的类中实现的。该帐户系统将在某个时候调用getAuthToken()
,然后简单地检查密码是否为空,将 LoginActivity 的 Intent 返回给帐户管理系统。使用该意图,帐户管理系统将回调应用程序并最终调用 LoginActivity。