在加载Activity之前加载所有资源?

时间:2013-08-28 18:21:17

标签: android

我有一项活动,必须抓取重图像,调整大小并加载到GridView。由于所有这些获取,调整大小的过程都非常耗时,当我尝试从另一个ACtivity加载此屏幕时,我会遇到延迟。

如何首先加载此“网格活动”的内容并仅在加载所有图像后将其打开?

使用startActivityForResult?如果这是一个解决方案,我怎么能检测到所有图像都已加载,因为GridView在滚动时加载图像。

修改

我被建议使用AsyncTask,之前我曾使用过几十次。但有些事让我困惑。

  1. 我应该将自定义适配器初始化发送到AsyncTask吗?

    mGridView = (GridView) findViewById(R.id.gridview);
    mImageAdapter = new ImageAdapter(this);
    mGridView.setAdapter(mImageAdapter);
    
  2. 或者我应该在自定义适配器内部执行异步任务,即在方法getView内,并且每个gridview单元格都会创建一个对AsyncTask的新调用?

2 个答案:

答案 0 :(得分:1)

尝试创建AsyncTask

正常创建Activity。在onCreate()结尾处,开始AsyncTask

AsyncTask的{​​{1}}方法上,向用户显示一些动画或消息。

onPreExecute()处理您的图片。

doInBackground()上,将您的图片加载到onPostExecute()上,然后停止动画或关闭该消息。

这样,您的GridView就不会在创建时提到您的延迟。

答案 1 :(得分:1)

您可以通过在AsyncTask方法中放置获取和调整大小的所有代码来使用doInBacground,您可以将数据保存在对象中(可能是ArrayList Bitmap }})返回onPostExecute方法(参见AsyncTask genric types)。

然后还必须通过将ImageAdapter中的对象作为参数添加到其中来更改AsyncTask构造函数。

public class DownloadPdfTask extends AsyncTask<Void, Integer, ArrayList<Bitmap>> {
    private ArrayList<Bitmap> images;
    @Override
    protected ArrayList<Bitmap> doInBackground(Void... arg0) {
        // TODO Auto-generated method stub
        /** your long task here, and set "images" **/
        return images;
    }

    @Override
    protected void onPostExecute(ArrayList<Bitmap> images) {
        // TODO Auto-generated method stub
        super.onPostExecute(images);
        mGridView = (GridView) findViewById(R.id.gridview);
        mImageAdapter = new ImageAdapter(this, images); // new construcor
        mGridView.setAdapter(mImageAdapter);
    }

}

在适配器中使用images列表!