首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码优化

代码优化
EN

Stack Overflow用户
提问于 2012-08-18 09:27:00
回答 3查看 226关注 0票数 0

我有这样的代码:

代码语言:javascript
复制
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循环)来使用这个构造:

代码语言:javascript
复制
 bitmapArray.add(Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
                        R.drawable.disk01), 0, 0, origW, origH, matrix, true));

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

萨克斯

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

代码语言:javascript
复制
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;

也许这不是“优化”,我不得不说“可读性”。

抱歉,我的英语不好

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-18 10:05:09

get()只需查看给定的位置并返回那里的内容。add()只是添加了传递给它的内容。

没有什么区别

代码语言:javascript
复制
disk1 = BitmapFactory.decodeResource(getResources(), R.drawable.disk01);
disk1 = Bitmap.createBitmap(disk1, 0, 0, origW, origH, matrix, true);
bitmapArray.add(disk1);

代码语言:javascript
复制
bitmapArray.add(Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
                        R.drawable.disk01), 0, 0, origW, origH, matrix, true));

因为…的结果

代码语言:javascript
复制
Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
                            R.drawable.disk01), 0, 0, origW, origH, matrix, true));

是位图,考虑是否先将其保存到Bitmap对象。这就像从瓶子里喝,你可以先把它装进玻璃里,或者直接从瓶子里喝,在这两种情况下你都喜欢可乐或者其他什么。

票数 0
EN

Stack Overflow用户

发布于 2012-08-18 09:35:43

请检查ArrayList添加方法的Java

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

调用add方法时,对象将被添加到ArrayList中。

现在,当您正在检索它时,使用

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

它将返回存储的对象,它不会调用在add方法中编写的代码。

票数 0
EN

Stack Overflow用户

发布于 2012-08-18 10:09:28

Collection.get返回存储在给定位置的对象。您可以调试此过程,以详细了解有关此问题的更多信息。

那句话,这个

代码语言:javascript
复制
bitmapArray.add(Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
                    R.drawable.disk01), 0, 0, origW, origH, matrix, true));

是相同的

代码语言:javascript
复制
disk1 = BitmapFactory.decodeResource(getResources(), R.drawable.disk01);
disk1 = Bitmap.createBitmap(disk1, 0, 0, origW, origH, matrix, true);
bitmapArray.add(disk1);

在优化方面,我相信两者都使用了几乎相同数量的内存,因为将创建一个对象并将其存储在ArrayList中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12017452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档