6

我正在挖掘GitHub android 应用程序源代码

我试图找出他们如何LoginActivity在应用程序首次启动时强制显示。在它们的清单中,它们似乎HomeActivity是 MAIN并且LoginActivity仅被明确启动

这意味着它总是HomeActivity在应用程序首次打开时启动。但是,我在HomeActivity 中看不到任何逻辑表明他们检查帐户是否存在,如果不存在则转到LoginActivity

在代码LoginActivity只从这里启动

4

2 回答 2

6

好的,整个Android账号认证和同步适配器机制乍一看可能比较复杂,GitHub Android app在那里又增加了一层复杂性,但我会尝试向您解释整个流程(希望我的理解是正确的) .

首先,如果您还不熟悉该主题,我会向您推荐这篇关于 Android Authenticator 的文章。GitHub Android 使用该文章中描述的完全相同的机制。

你是对的,HomeActivity是先启动的。然后它启动OrganizationLoader以加载组织列表。该加载程序调用方法,OrganizationService该方法是GitHub Java API的一部分。GitHub Android 用于RoboGuice配置注入最常用的类,如 GitHub API 服务。您可以看到在ServicesModule中创建了 OrganizationService 。它GithubClient作为构造函数参数,还有一个GitHubModule配置为在需要实例时返回AccountClientGitHubClientAccountClient覆盖configureRequest()方法并调用

String token = account.getAuthToken();

这是GitHubAccount类的一个方法,它从内部 Android 的AccountManager. 并且AccountManager配置为使用您谈到的AccountAuthenticatorLoginActivity ,如果设备上没有帐户,它将返回意图。

希望这可以帮助 :)

于 2013-12-20T16:29:06.713 回答
2

该应用程序使用的是Android帐户系统,该系统实际上是在您已经找到的类中实现的。该帐户系统将在某个时候调用getAuthToken(),然后简单地检查密码是否为空,将 LoginActivity 的 Intent 返回给帐户管理系统。使用该意图,帐户管理系统将回调应用程序并最终调用 LoginActivity。

于 2013-12-20T16:14:29.243 回答