首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使activity从Android AsyncTask更改?

如何使activity从Android AsyncTask更改?
EN

Stack Overflow用户
提问于 2011-01-29 11:57:09
回答 3查看 9K关注 0票数 9

在这样一个场景中,我的UI将从一个单独的线程(使用AsyncTask)更新,我可以将AsyncTask定义为活动的内部类,但我发现这有两个缺点:

  1. 它使源文件变得非常大,降低了管理代码
  2. 的效率--这使得线程类

很难重用。

什么是好的解决方案?使用内部类,但抽象它对其他类所做的一切?将对活动的引用传递给AsyncTask?总是将AsyncTask类定义为一个内部类,并且只接受源文件会很大吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-29 12:17:28

我已经看到了很多例子,只是将一个Context传递到AsyncTask的构造函数中。

代码语言:javascript
运行
复制
public class BackgroundStuff extends AsyncTask<Void, Void, Void> {
    ...
    Context mContext;
    ...
    BackgroundStuff(Context context){
        super();
        this.mContext = context;
    }
    ...
}

我很想知道是否还有其他人使用其他方法。

票数 2
EN

Stack Overflow用户

发布于 2011-01-29 12:39:21

首先,也是最重要的:当使用AsyncTask时,您不能在doInBackground()中执行UI活动。

您可以做的是--如果您想要更新长期运行的后台作业的状态,可以从publishProgress(values) ()到doInBackground()。然后,运行时将为这些值调用您的onProgressUpdate(values)回调,该回调在UI线程中运行,并从您可以更新UI的位置运行。

看一看,例如https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TweetListActivity.java#L336,看一个例子。

AsyncTask可以在自己的类文件中实现。

票数 13
EN

Stack Overflow用户

发布于 2011-04-18 22:11:59

对于AsyncTasks,我有一个有点奇怪的P.O.V,因为我通常更喜欢使用普通线程,但从本质上讲,我执行后台任务和更新UI的方式是在onCreate()方法的末尾创建一个处理程序,然后我将重写handleMessage(Message )方法。

然后,在我的线程中,我将将Handler作为参数传入,然后当我希望进行更新时,我将从线程发送一条消息到Handler,现在所做的是从新的后台线程到UI线程上进行通信,以处理UI上的工作。

现在,我设想AsyncTasks执行类似的任务,但不再需要实现重写处理程序的handleMessage方法。

更多地了解这两种方法的优缺点是很有趣的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4836716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档