用于将图像保存到SD卡的线程

时间:2014-01-15 15:14:10

标签: android multithreading

想知道什么是最合适的线程,用于将图像从相机保存到SD卡以及使用成功/失败消息(吐司)更新UI等过程。 处理程序或异步线程? 异步线程也可以将Bitmap作为参数吗?

由于 Ciaran

3 个答案:

答案 0 :(得分:2)

这样的事情应该这样做:

AsyncTask<Bitmap, Void, Boolean> task = new AsyncTask<Bitmap, Void, Boolean>() {

            @Override
            protected Boolean doInBackground(Bitmap... bitmaps) {
                Boolean saved = writeToDisk(bitmaps[0]); //Your write code
                return saved;
            }

            @Override
            protected void onPostExecute(Boolean saved) {
                if (saved) {
                    Toast.makeText(context, R.string.success, Toast.LENGTH_LONG).show();
                    //HANDLE SUCCESS
                } else {
                    Toast.makeText(context, R.string.error, Toast.LENGTH_LONG).show();
                    //HANDLE ERROR
                }
            }
        };

        task.execute(bitmap);

答案 1 :(得分:1)

asynctask类非常适合您想要实现的目标,您可以将位图作为参数传递给asynctask。

答案 2 :(得分:1)

Android不允许在UI线程上使用网络(即处理按钮点击等事件)。此外,它不允许对该线程进行任何慢速操作,因为它们会停止整个GUI。

我不确定这是否适用于SD卡写入。这可能取决于您需要在那里写入的数据量。如果它是以兆字节或接近于兆字节的顺序,使用单独的线程写入SD卡毫无疑问是有意义的,因为写入过程可能持续足够长的时间。甚至可能更少。