代码优化

时间:2012-08-18 09:27:00

标签: android optimization

我有这段代码:

private Bitmap disk1, disk2, disk3;
private ArrayList<Bitmap> bitmapArray = new ArrayList<Bitmap>();
......
disk1 = BitmapFactory.decodeResource(getResources(), R.drawable.disk01);
disk1 = Bitmap.createBitmap(disk1, 0, 0, origW, origH, matrix, true);
disk2 = BitmapFactory.decodeResource(getResources(), R.drawable.disk02);
disk2 = Bitmap.createBitmap(disk2, 0, 0, origW, origH, matrix, true);
disk3 = BitmapFactory.decodeResource(getResources(), R.drawable.disk03);
disk3 = Bitmap.createBitmap(disk3, 0, 0, origW, origH, matrix, true);

bitmapArray.add(disk1);
bitmapArray.add(disk2);
bitmapArray.add(disk3);

我认为优化代码我可以在没有位图的情况下使用这种结构(使用for循环):

 bitmapArray.add(Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
                        R.drawable.disk01), 0, 0, origW, origH, matrix, true));

但我有点困惑:它会存储方法的结果,或者每当我尝试获取 bitmapArray.get(0)时会调用这些方法吗?

感谢名单


更新:我将在处理程序回调中使用数组来更改画布上的动画:

Bitmap item;
.......
public Handler.Callback hc = new Handler.Callback() {
        public boolean handleMessage(Message msg) {
                    switch (msg.what) {
                    case 1:
                        if (ai == 8)
                            ai = 0;
                        item = bitmapArray.get(ai);
                        ++ai;
                        break;

也许不是称之为“优化”,我不得不说“可读性”

抱歉我的英文不好

3 个答案:

答案 0 :(得分:0)

请查看ArrayList添加方法

的Java文档
  

添加(E e)             将指定的元素追加到此列表的末尾。

当调用add方法时,在ArrayList中添加了对象。

现在,当您使用

进行检索时
  

get(int index)             返回此列表中指定位置的元素。

它将返回存储的对象,它不会调用add方法

中编写的代码

答案 1 :(得分:0)

get()只看一个给定的位置,然后返回那里。 add()只是添加了传递给它的内容。

没有区别
disk1 = BitmapFactory.decodeResource(getResources(), R.drawable.disk01);
disk1 = Bitmap.createBitmap(disk1, 0, 0, origW, origH, matrix, true);
bitmapArray.add(disk1);

bitmapArray.add(Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
                        R.drawable.disk01), 0, 0, origW, origH, matrix, true));

结果

Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
                            R.drawable.disk01), 0, 0, origW, origH, matrix, true));

是一个位图,首先将它保存到Bitmap对象。 就像从瓶子里喝水一样,你可以先把它装进玻璃瓶里,或直接从瓶子里喝水,在这两种情况下你都可以享用可乐或其他任何东西。

答案 2 :(得分:0)

Collection.get返回存储在给定位置的对象。您可以调试该过程以详细了解此信息。

那说,这个

bitmapArray.add(Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
                    R.drawable.disk01), 0, 0, origW, origH, matrix, true));

相同
disk1 = BitmapFactory.decodeResource(getResources(), R.drawable.disk01);
disk1 = Bitmap.createBitmap(disk1, 0, 0, origW, origH, matrix, true);
bitmapArray.add(disk1);

在优化方面,我相信两者都会使用相同数量的内存,因为无论如何都会创建一个对象并存储在ArrayList中。