android asynctask发送回调到ui

发布于 2021-01-30 16:38:13

我有以下不在活动内的asynctask类。在活动中,我正在初始化asynctask,并且希望asynctask将回调报告回我的活动。可能吗?还是asynctask必须与活动位于同一类文件中?

protected void onProgressUpdate(Integer... values) 
{
    super.onProgressUpdate(values);
    caller.sometextfield.setText("bla");
}

像这样吗

关注者
0
被浏览
333
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    您可以创建一个interface,将其传递给AsyncTask(在构造函数中),然后在中调用methodonPostExecute()

    例如:

    您的界面:

    public interface OnTaskCompleted{
        void onTaskCompleted();
    }
    

    您的活动:

    public class YourActivity implements OnTaskCompleted{
        // your Activity
    }
    

    和您的AsyncTask:

    public class YourTask extends AsyncTask<Object,Object,Object>{ //change Object to required type
        private OnTaskCompleted listener;
    
        public YourTask(OnTaskCompleted listener){
            this.listener=listener;
        }
    
        // required methods
    
        protected void onPostExecute(Object o){
            // your stuff
            listener.onTaskCompleted();
        }
    }
    

    编辑

    由于此答案非常受欢迎,因此我想补充一些内容。

    如果您是Android开发的新手,那么这AsyncTask是一种在不阻止UI线程的情况下正常运行的快速方法。它确实确实解决了一些问题,但类本身的工作方式并没有错。但是,它带来了一些影响,例如:

    内存泄漏的可能性。如果您继续参考Activity,即使用户离开屏幕(或旋转设备),它也将保留在内存中。
    AsyncTask无法将结果传递给Activity是否Activity已被破坏。您必须添加额外的代码来管理所有这些内容,或者您​​要进行两次操作。
    卷积的代码可以完成所有工作Activity
    当您觉得自己已经足够成熟,可以继续使用Android时,请看一下这篇文章,我认为这是使用异步操作开发Android应用程序的更好方法。




知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看