【发布时间】:2015-08-29 14:04:29
【问题描述】:
所以正如标题所暗示的那样 - 我已经对该主题进行了大量研究,但我仍然感到困惑并且无法实现我想要的。
在非常简化的场景中,我有一个 LoginActivity,其中方法是 boolean validateUserInput(String mail, String password),我想在单独的线程中进行检查输入。我想我将来会扩展它以进行登录本身(http请求)。当然,如果操作成功与否,我想获得布尔值 - 在操作过程中我想显示进度条对话框。
创建一个线程,运行代码,返回结果,同时显示进度条,小菜一碟吧?
我应该使用 asynctask 还是 runnable?我该怎么做才能不阻塞 UI 线程?
这是我尝试在 LoginActivity 中使用的代码:
new Thread(new Runnable() {
@Override
public void run() {
mUserInputValidated = validateUserInput(inputEmail.getText().toString(), inputPassword.getText().toString());
}
}).start();
if(mUserInputValidated)
{
attemptUserLogin(inputEmail.getText().toString(), inputPassword.getText().toString());
}
我也尝试了 asynctask 方法,但由于我在onPreExecute() 中启动进度对话框并在onPostExecute() 中结束它,使用像LoginActivity.this 之类的引用,但最终出现了各种错误,我也无法解决内存泄漏问题修复?
我认为这是非常常见的场景,因为几乎每个应用程序都使用它,所以 - 常见的方法是什么?如何修复我的代码?
【问题讨论】:
标签: java android multithreading android-asynctask