android - 在 asynctask 中使用 asynctask

标签 android multithreading listview asynchronous android-asynctask

我想使用 AsyncTask 将图像加载到 ListView。

private class LoadImageTask extends AsyncTask<HashMap<String,Bitmap>,Void,Bitmap>{

    @SuppressWarnings("unchecked")
    @Override
    protected void onPostExecute(Bitmap result) {

               if(model.getIconCache().get(cellIcon)!=null){
                   icon.setImageBitmap(model.getIconCache().get(cellIcon));
                }else{
                    new LoadImageTask().execute(model.getIconCache());

                }


    }

    @Override
    protected Bitmap doInBackground(HashMap<String, Bitmap>... params) {
        //return model.getIconCache().get(cellIcon);
        return null;

    }

}

好吧,我知道这不是情感代码。然而,它运行良好,但需要大量内存分配。当阅读有关AsyncTask的文档时,它说Asynctask只能从UI线程调用,它怎么能让它在自身内部使用呢?当然,我想让我的代码在单个 AsyncTask 中工作。代码中的“模型”是一个在运行时通过另一个线程更新的对象。因此,我需要找到一种方法来使用单个异步任务来定期控制对象的状态。我怎么做?谢谢

最佳答案

仅在 backGround 中在 backGround 线程上运行,postExecute 和 preExecute 在 UI 线程本身上运行。出于同样的原因,您可以在其中显示和关闭对话框。

如果您想将单个 Asynctask 用于多种目的,您可以通过在 .execute() 方法中传递不同的常量来进行操作..

我的意思是这样的。

Integer Constant1 = 1;
int Constant2 = 2;

打电话时,,

new Background.execute(Constan1 or 2)

和 AsyncTask 中

doInBackground(Object.. arg0)
{
if(arg0.equals())
{

}
else if(arg0.equals())
{
}
}

关于android - 在 asynctask 中使用 asynctask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6731919/

相关文章:

android - Google Play 商店是否提供任何应用激活机制

android - 几次单击后,音频文件是否停止在 ListView 上播放?

android - 如何检查 url 方案是 Http 还是 Https 并根据它创建 URLConnection

android - 操作栏下方的图像和不同的屏幕尺寸

android - 如何在 Android 中发送电子邮件?

linux - 我可以在 Linux 2.6 中使用多少个 pthread_rwlock

php - 在 PHP 中同步和暂停线程

c# - 为什么这里要用锁?

android - picasso :将图像加载到小部件 ListView

android - ListView 和键盘导航