在类函数中运行一个线程

时间:2017-08-05 19:27:26

标签: java android multithreading

我需要用线程运行代码的某些部分。但是我从run()函数访问变量时遇到了问题。变量(也是函数参数)需要定义为final,但是当我这样做时,我无法在run()函数内更改它们的值。例如,现在iv方法无法访问变量run()

有什么方法可以解决这个问题吗?

@Override
public View getView(int position,  View convertView, ViewGroup parent) {

    LayoutInflater inflater = getLayoutInflater();

    convertView = getLayoutInflater().inflate(R.layout.gallery_gridsq, parent, false);
    ImageView iv = (ImageView) convertView.findViewById(R.id.icon);
    final File file = new File(Uri.parse(getItem(position).toString()).getPath());


    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            Bitmap bmp = null;
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            try {
                BitmapFactory.decodeStream(new FileInputStream(file), null, options);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

            options.inJustDecodeBounds = false;
            options.inSampleSize = 2;
            try {
                bmp = BitmapFactory.decodeStream(new FileInputStream(file), null, options);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

            iv.setImageBitmap(bmp);
        }
    };

    new Thread(runnable).start();
    return convertView;
}

1 个答案:

答案 0 :(得分:0)

您需要做的是让iv最终成绩:

final ImageView iv = (ImageView) convertView.findViewById(R.id.icon);

在此上下文中final表示您无法更改对象iv指向的引用,但您仍然可以调用它的任何方法。还要注意为每个视图创建新的Thread,我建议使用ExecutorService代表的线程池。