Android如何通过Runnable实现执行异步任务

3

文档说明必须从UI线程调用execute()。但是,由于我每隔几秒钟更新图像,所以我正在使用一个Runnable。在其中,我定义了需要执行的操作。其中之一是启动(execute())ASyncTask。但是,由于ASyncTask不应该从除UI线程以外的任何地方调用,我该如何继续?

3个回答

5

只需在Runnable中添加runOnUiThread,即可启动AsyncTask:

private Runnable updateImages= new Runnable() {
    public void run() {
        runOnUiThread(new Runnable() {
            public void run() { 
                // call your asynctask here 
            }
        }
    });
    //////YOUR CODE HERE
}

你几乎必须将runOnUiThread放在条件语句中,否则它会拖慢整个程序。 - Jack Satriano
我可以使用sendMessage而不是runOnUiThread,然后由于Handler已经在UI线程上实现,我将在那里处理消息,即启动ASyncTask。 - Namratha
@Namratha:runOnUiThread也是在UI线程上实现的。runOnUiThread是Activity类的方法,而不是任何线程的方法。我建议使用runOnUiThread,因为它很容易实现。 - ρяσѕρєя K
@Namratha:如果你在实现runOnUiThread或从runOnUiThread更新UI方面遇到任何问题,请告诉我,我会尽力帮助你。谢谢。 - ρяσѕρєя K
1
@imrankhan:是的,我明白了。我只是想知道这两种方法的优缺点。谢谢! - Namratha

1
可能需要重新设计您的项目,以仅使用AsyncTask而不是Runnable。我不确定AsyncTask是否也喜欢这种行为,但我之前曾更改过一些AsyncTasks中的UI内容。

0

给你。

private Handler mHandler = new Handler(Looper.getMainLooper());

private Runnable updateImages= new Runnable() {
    public void run() {
        .........
        .........
        ......... 

        mHandler.post(new Runnable() {
            public void run() {
               call your asynctask here
            }
        });
    }
};

但它不在主线程上。这对你有用吗?这与文档所说的相反。 - Namratha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接