当前位置: 首页 > 面试题库 >

android asynctask发送回调到ui

公孙巴英
2023-03-14
问题内容

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

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

像这样吗


问题答案:

您可以创建一个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应用程序的更好方法。




 类似资料:
  • 钻研比使用基本刮擦功能更深。 我了解基本的BaseSpider类:名称、允许的\u域,以及如何为每个start\u url发送请求对象,其中parse函数用作回调函数,parse接收响应。 我知道我的解析函数为每个名为“服务名称”的类的数据保存了一个XPath响应,我相信它会通过循环将每个XPath响应匹配的数据存储到对象“项”中,然后将其发送到“我的items.py容器。 'newUrl'包含连

  • 问题内容: 如何使用jQuery将JSON对象发送到Web方法? 问题答案: 请参阅Dave Ward的这篇文章。这是完成此操作的完整教程。另外,您还会发现其他很棒的jquery / ASP.net东西。 编辑:-Dave正在调用不带任何参数的方法,您可以将空 数据 属性替换为要发送的实际数据:

  • 问题内容: 我正在尝试完成一些ajax请求,以在不刷新的情况下将textarea插入数据库。这是我的代码: HTML: JS: 我的问题: 1)如何将文本区域的内容发送到onclick函数中? 2)我如何转义/ urlencode等。因此保留了换行符 问题答案: 您的代码有一些问题,例如用于串联 试试这个 -

  • 现在我有:- 1) 1活动,它是从AppCompactActivity扩展而来的主要活动。 2) 1扩展自fragment的类,这是从主活动(1)-ProfileTeacherActivity调用的片段。java 3) 1个从DialogFragment扩展的fragment类,此对话框从fragment(2)-ModalBox调用。java 所以,基本上,这只是一个简单的执行流程。开始时,显示的

  • 问题内容: 我知道可以将AJAX请求发送到页面。而且我还知道页面通过Web方法处理AJAX请求。 是否还可以将AJAX请求发送到页面?如果是这样,页面是否还通过Web方法处理AJAX请求?请注意,我想从页面返回JSON响应。这可能吗? 问题答案: 您可以在页面的代码后面定义Web方法,然后调用它们: 然后,在您的jQuery代码中调用Web方法: 这是一个很好的入门指南。

  • 我目前正在运行一个完整的节点,并试图循环处理一些事务。每当我使用Web3j并使用和我到达一个包含合约的事务(就像这个)并使用函数它返回一个空值。我有办法检索合约地址吗? 编辑:这是我用来获取交易的代码 这将返回一个“null”