android - 如何正确使用 AsyncTask

标签 android multithreading android-asynctask

我想从相机表面预览中捕获帧缓冲区,并将这些缓冲区发送到另一个函数进行处理/发布到网络上的某个地方。

Android 开发指南给出了这个例子: http://developer.android.com/reference/android/os/AsyncTask.html

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
}

执行方法如下:

new DownloadFilesTask().execute(url1, url2, url3);

整个操作是一个大的 AsyncTask(换句话说,循环是否会坐在那里等待每个文件同步下载),而整个任务在后台工作,或者这是否会启动多个线程传递的每个 URL?

关于我的项目,每次我想捕获帧缓冲区时都简单地创建一个全新的 AsyncTask 是否合理?类似的东西:

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

最佳答案

它将是一个单线程,取自托管线程池。参数省略号只是您的 doInBackground 方法的输入。从示例中可以看出,那里没有生成任何线程。如果您想为每个 URL 使用一个线程,则必须为每个线程创建一个新的 AsyncTask

关于android - 如何正确使用 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5139703/

相关文章:

Android TCP 快速启动配置

c++ - 在 Linux 的情况下替换 Windows 特定的 HANDLE、事件创建和同步 API

android - 在ListView中列出音频和视频文件

android - 如何将数据从 onSuccess 传递到其他类?

java - 读取位图文件返回 null

java - 安卓混淆器 : can't find referenced class

android - 我可以在普通的未 root 手机上测试 android 系统应用程序吗?

android - 如何验证我的应用程序 apk 是否被正确混淆?

java - 如何并行运行任务并在第一个任务失败时等待第二个任务,否则回复并让第二个任务运行

c - 在这种情况下最好使用哪种流程