gpt4 book ai didi

android - 从 AsyncTask 安全刷新 Activity 详细信息

转载 作者:行者123 更新时间:2023-11-29 21:28:18 25 4
gpt4 key购买 nike

我有一个带有关联网站的 Android 应用程序。我有一个 LoginActivity,它接受用户凭据,使用 AsyncTask 子类通过网站验证它们,如果正确,则将它们存储在 SharedPreferences 中以供将来使用。

我有一个 MainActivity,它根据那些 SharedPreferences 值显示用户详细信息。

因此,当 AsyncTask 完成时,我需要刷新 Main Activity 中显示的用户详细信息。

  1. 我可以通过在调用 LoginActivity 时将对 MainActivity 的引用传递给 LoginActivity 来实现这一点,然后在 AsyncTask onPostExecute 中,调用该 MainActivity 实例中的一个函数来刷新显示的数据。这似乎是一种常见的做法,但我不确定它是否完全安全。这不太可能,但如果 MainActivity 在 AsyncTask 仍在处理时被操作系统终止,会发生什么情况?

  2. 或者,在这种情况下,我可以在启动 LoginActivity 时直接完成 () MainActivity,然后从 onPostExecute 启动一个新的 MainActivity,它会显示刷新的数据。但我可能有其他 Activity ,在这些 Activity 中用户交互正在进行,而后台 AsyncTask 正在刷新数据 - 在这些情况下,第二种方法将不起作用。

只是想知道是否有更好的方法,或者第一种方法是否足够安全?

最佳答案

I could do this by passing a reference to the MainActivity to the LoginActivity when calling it, and then in the AsyncTask onPostExecute, call a function in that MainActivity instance to refresh the displayed data.

处理来来往往的 Activity 的现成方法是使用 AsyncTaskLoader .这种方法实现了@ByteMe 的注销/注册 Activity 实例的建议。不幸的是,它的程序员 API 并不那么轻松。特别是,API 是为在打开时立即开始加载的屏幕编写的。使用 Loaders在用户交互时开始加载屏幕中的 API 是完全可能的,但实现起来有点尴尬。

一种常见的替代方法——仍然只使用 core- 和 support-v4 库类——是使用 IntentService做后台工作和LocalBroadcastManager交付结果。

如果可以选择使用开源库,您可能需要查看 Otto BusRxJava传递“加载完成”事件。

Alternatively, in this instance I could just finish() the MainActivity when I start the LoginActivity, and launch a new MainActivity from the onPostExecute which would display the refreshed data.

如果我没理解错的话,MainActivity 是您的启动 Activity 。它做的第一件事是检查是否需要登录,如果需要,它会指向 LoginActivity。如果不需要登录,它会显示帐户数据;如果需要,它会等待 LoginActivity 返回。

这听起来非常适合 startActivityForResult(Intent, int) .只需让主要 Activity 使用请求代码启动登录 Activity 。登录 Activity 可以调用setResult(int, Intent)带有返回码和身份验证数据。然后主 Activity 可以执行 onActivityResult()从登录 Activity 中获取返回值并执行所有需要完成的操作。

作为一个额外的好处,您可以将所有 SharedPreferences 交互集中在主要 Activity 中,并将其完全保留在登录 Activity 之外。这使得两者之间的耦合度较低。

您可以考虑的一种完全不同的方法是完全放弃用户身份验证并依赖 Google+ Sign-in通过用户的 Google+ 帐户识别用户。你可以通过 Facebook 做同样的事情.从好的方面来说,使用其中一个(或两者)将使您完全摆脱以安全方式管理身份验证和凭据的责任。不利的一面是,供应商锁定可能会吓跑一些用户。

关于android - 从 AsyncTask 安全刷新 Activity 详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com