Android 如何正确使用AsyncTask

Android 如何正确使用AsyncTask,android,multithreading,android-asynctask,Android,Multithreading,Android Asynctask,我想从相机表面预览中捕获一个帧缓冲区,并将这些缓冲区发送到另一个函数,以便在web上的某个位置进行处理/发布 《Android开发指南》给出了以下示例: 当整个任务在后台工作时,整个操作是一个大的异步任务(换句话说,该循环将坐在那里等待每个文件同步下载),还是将为传递的每个URL启动多个线程 与我的项目相关,每次我想要捕获一个帧缓冲区时,简单地创建一个全新的AsyncTask是否合理?大致如下: //for each frame buffer i want to process: ne

我想从相机表面预览中捕获一个帧缓冲区,并将这些缓冲区发送到另一个函数,以便在web上的某个位置进行处理/发布

《Android开发指南》给出了以下示例:

当整个任务在后台工作时,整个操作是一个大的异步任务(换句话说,该循环将坐在那里等待每个文件同步下载),还是将为传递的每个URL启动多个线程

与我的项目相关,每次我想要捕获一个帧缓冲区时,简单地创建一个全新的AsyncTask是否合理?大致如下:

//for each frame buffer i want to process:
    new FrameProcessorTask().execute(byte[]);

只有一个线程在数据上循环

你也可以做后者


对于第二个选项,您需要考虑堆大小,因为手持设备只有有限的内存和许多并行线程,所有在大缓冲区中下载的内容都可能会超出可用内存。

它将是一个从托管线程池中获取的单线程。参数省略号只是
doInBackground
方法的输入。正如您从示例中看到的,没有线程在其中生成。如果希望每个URL使用一个线程,则必须为每个URL创建一个新的
AsyncTask

帧之间会有间隔--处理过程只是将其转换为一个ARGB位图--我希望这种间隔会减少出现此问题的机会。每个线程都有可能在下一个线程开始之前完成[至少处理,如果不上传的话]。
new DownloadFilesTask().execute(url1, url2, url3);
//for each frame buffer i want to process:
    new FrameProcessorTask().execute(byte[]);