Java AsyncTask 将变量传递给主线程

标签 java android multithreading networking android-asynctask

在使用 AsyncTask 在另一个线程中完成网络连接后,我一直在尝试更改 textView。我尝试了无数的解决方案,但到目前为止没有一个有效。

我能够实现目标的唯一方法是使用 .get(),但它会使 UI 线程停止一段时间,这是我不想要的。

我还尝试使用 AsyncTask 作为外部类,并在中间使用包装类。

所以我的问题是,在不卡住主线程的情况下获取 doInBackground() 和 onPostExecute() 中使用的变量的最简单方法是什么?

最佳答案

这是一种方法。您可以在异步任务的参数中提供回调,执行您想要的任何操作,然后它们从异步任务中获取返回值。

回调接口(interface):

public interface AsyncTaskCompleteListener<T> {
    public void onTaskComplete(T result, int number);
}

异步任务:

public class LoadURL extends AsyncTask<String, Process, String> {

    private AsyncTaskCompleteListener<String> callback;

    public LoadURL(AsyncTaskCompleteListener<String> cb) {
        this.callback = cb;
     }

    protected void onPreExecute() {}

    protected String doInBackground(String... arg0) {
         // do something
        return content;
    }

    protected void onPostExecute(String content) {
        if (callback != null)
            callback.onTaskComplete(content,number);
    }
}

Activity :

public class LoginActivity extends Activity implements AsyncTaskCompleteListener<String> {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        LoadURL loadUrl = new LoadURL(LoginActivity.this);
        loadUrl.execute(...);
    }

    @Override
    public void onTaskComplete(String result, int number) {...}
}

在onTaskComplete中,你可以轻松修改你的TextView

关于Java AsyncTask 将变量传递给主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28854875/

相关文章:

java - SaveOrUpdate 时出现唯一约束冲突错误

JAVA获取线程中可运行对象

C 读和线程安全 (linux)

java - android "use $ instead of ."生成无法解析符号

具有默认值的类的java数组

java - 从 JNI 函数抛出 Java 异常后是否调用 C++ 析构函数?

java - onProgressUpdate 不起作用

android - 如何显示1分钟的进度条?

java - 使用elasticsearch获取最近的位置

android - 蜂窝操作栏和边距