从Application对象中获取网络请求的好方法是什么?

时间:2015-06-28 11:15:07

标签: android performance android-activity

在Chet Haase的the wonderful article中,我读到了一些我觉得非常重要的建议:

  

永远不要在Application对象中发出网络请求。那个对象   可以在应用程序的服务或BroadcastReceivers之一创建时创建   开始;点击网络将转换执行本地更新的代码   以特定频率进入常规DDoS。

我目前使用的应用程序遵循这个(不好)的做法:它在Application.onCreate()执行用户登录 - 当然在后台线程上,但仍然。这是一项要求:用户需要在任何活动执行任何其他任务之前登录,这通常取决于登录用户。我目前使用RxJava执行此操作,任何活动任务可观察对象都是flatMapped到userlogin事件,它工作得很好。

所以如果我应该从Application中取出登录任务,它应该去哪里?起初我认为使用ActivityLifecycleCallbacks并观察要创建的第一个活动会很好。但是这个回调(onActivityCreated)将在创建后调用,这对我来说太迟了。

所以我认为这应该通过创建一些BaseActivity类并将登录和其他初始化调用放在其中onCreate()来完成。但我不觉得这太好了,因为我在一个活动课中混合了一些应用程序范围的逻辑,它有点臭...

我可能错过了什么?

1 个答案:

答案 0 :(得分:1)

<强> SplashActivity

启动应用程序的活动。它检查资源可用性,如果需要,获取它们。它还会检查是否存在活动的用户会话,是否执行登录,是否有记住的凭据,还是将用户重定向到登录/注册屏幕

<强> BaseActivity

一个特定于您的应用的活动,该活动包含适用于您在应用程序中的所有活动的初始化和生命周期回调代码。