2

这可能是一个常见问题,但我找不到我的确切情况。我知道这在很多方面取决于开发人员的选择,但我不知道如何选择最佳。

我有我的初始应用程序启动屏幕,在检查用户登录时只会显示一个徽标。如果他们的登录详细信息已经存储在 sharedPreference 中,那么我想根据我的在线详细信息数据库检查这些详细信息以进行验证。完成所有检查后,我会将用户转到主应用程序屏幕或注册屏幕。

因此,在检查用户详细信息时,然后对其进行验证。我应该单独执行此操作还是使用处理程序?我认为不需要 AsyncTask,因为我不想将任何进度详细信息传递回 UI?

TIA

4

4 回答 4

1

您可能应该在单独的线程中执行此操作,因为它是网络活动。IntentService是一个不错的选择。我认为您主要关心的是,即使用户旋转屏幕并且活动被销毁并重新创建,您选择的任何方法都需要工作。

可能使用 Fragment 作为初始屏幕setRetainInstance(true),因此它会在配置更改后重新附加到活动。然后,您可以传递服务 a Handler(或Messenger更准确地说是 a),或者让服务在完成工作时发送广播意图。

于 2013-02-25T15:50:15.050 回答
1

我建议使用 AsyncTask。

首先,因为 AsyncTask 是一个完整的线程框架(在幕后使用 Thread 和 Handlers),它允许更好地控制单线程操作。例如cancel(),如果用户决定在启动屏幕完成之前离开应用程序。

我认为不需要 AsyncTask,因为我不想将任何进度详细信息传递回 UI?

实际上,是的,即使要启动新活动(Login 或 AlreadyLoggedIn),您也必须从 UI 线程调用 startActivity()

于 2013-02-25T15:50:31.077 回答
1

何时使用异步任务?
AsyncTask 有助于将内存密集型/阻塞调用卸载到后台线程,而您的 UI 操作仍然可以在 UI 线程中进行。如果任何操作阻塞 UI 线程超过 4-5 秒,您可能还会收到 ANR(Android 无响应)对话框。onPostExecute当您想要在完成流程 ( ) 之后以及在启动之前( )更新 UI 时,AsyncTask 会派上用场onPreExecute

使用线程 无论你在doInBackground使用 AsyncTask 中做什么,也可以使用线程来实现。但是如果您需要执行任何 UI 操作,您将需要使用HandlerrunOnUiThread来完成您的任务。如果您希望使用线程,请参阅android 中的无痛线程。

Budius说的也是真的。

在您的情况下,您可以使用 AsyncTask 在 sharedPref 中检查用户凭据,然后使用中间件进行适当的身份验证,最后在 onPostExecute 中导航到新活动。

同时,您可以向用户显示一个进度条,表示正在进行的身份验证过程。

于 2013-02-25T16:01:55.937 回答
1

补充一点。我有一个非常相似的情况,我必须从“主屏幕”在后台验证用户登录(存储在手机中)。我使用了 IntentService ResultReceiver 模式。起初我花了一点时间来了解它,但一旦实现它就非常易于管理。

基本上,您启动作为您的意图服务的活动,将所需的任何参数(用户名、密码等)传递给它。在我的例子中,它是一个单独的类,它使用 REST 来验证用户。REST 类完成其工作后,ResultReceiver 方法 onReceiveResult 会将数据从 REST 活动返回给 UI 活动。

于 2013-02-25T16:09:03.100 回答