как правильно обрабатывать растровые изображения? - PullRequest
0 голосов
/ 16 августа 2011

Я обнаружил исключение "Недостаточно памяти". Чем я пытался использовать recycle как в коде. Теперь я сталкиваюсь с попыткой использовать переработанное исключение растрового изображения. Как правильно утилизировать? Это должно только переключаться между изображениями в потоке.

Спасибо.

public class AVMSystemActivity extends Activity implements Runnable{
    /** Called when the activity is first created. */
    Field[] drawables;
    ImageView imageView;
    boolean adFlip=true;
    Resources a;
    boolean first=true;
    int k=0x7f020000;
    int last;
    private RefreshHandler mRedrawHandler = new RefreshHandler();  
    int adCount=0;
    RelativeLayout ll;
    class RefreshHandler extends Handler {  
        @Override  
        public void handleMessage(Message msg) {  
            AVMSystemActivity.this.updateAd();  
        }  

        public void sleep(long delayMillis) {  
            this.removeMessages(0);  
            sendMessageDelayed(obtainMessage(0), delayMillis);  
        }  
    };  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        drawables = avm.system.R.drawable.class.getFields();
        //---------------------------------------------------
        //---------------------------------------------------
        //---------------------------------------------------
        File dir = new File("assets/drawable");

        String[] children = dir.list();

        a=this.getResources();
        int i=0x7f020000;
        boolean done=true;
        ll = (RelativeLayout) findViewById(R.id.rlout);
        imageView = new ImageView(this);
        ll.addView(imageView);


        try
        {
            for (i=0x7f020000;i<0x7f020040;i++)
            {
                String name=a.getResourceName(i);
                name=name.substring(name.indexOf(':')+1);
                name=name.substring(9);
                if(name.startsWith("ad"))
                {
                    Log.i("res tara",name);
                    //imageView.setImageDrawable(a.getDrawable(i));//------
                    //imageView.setBackgroundDrawable(a.getDrawable(i));            
                    adCount++;
                }
                else
                {
                    last=i;
                    Log.i("LAST ELSE",i+"");
                    break;
                }
            }
        }
        catch(Exception e)
        {
            last=i;
            Log.i("LAST",i+"");
            done=false;
            e.printStackTrace();
        }
        Button btn=(Button)findViewById(R.id.restbutton);
        btn.setOnClickListener(new View.OnClickListener() { 
            public void onClick(View view) { 
                Log.i("ACTION","BUTTON CLICKED");
                adFlip=!adFlip;
                try
                {
                    Intent i = new Intent(AVMSystemActivity.this,RestListActivity.class);   
                    startActivity(i);
                }
                catch(Exception e)
                {
                    Log.i("cort",e.toString());
                }
            } 
        });
        updateAd();
    }
    int currentInt=0;

    private void updateAd(){  
        Log.i("update","lan");
        try
        { 
            if(adFlip)
            {  
                mRedrawHandler.sleep(1000);
                //*******
                if(k==last)
                    k=0x7f020000;
                else 
                {
                    if(a.getResourceName(k).contains("icon"))
                    {
                        Log.i("update",a.getResourceName(k));
                    }
                    else
                    {
                        Log.i("update",a.getResourceName(k)+"__--");
                        //imageView.setBackgroundDrawable(a.getDrawable(k));

                        if(!first)
                        {
                            imageView.buildDrawingCache();
                            Log.i("update",a.getResourceName(k)+"//////");
                            ((BitmapDrawable) imageView.getDrawable()).getBitmap().recycle();
                            Log.i("update",a.getResourceName(k)+"******");
                        }
                        else
                        {
                            first=false;    
                            Log.i("update","------------");
                        }
                        imageView=new ImageView(this);
                        Log.i("update",a.getResourceName(k)+"++++++");
                        //imageView.getDrawable().getBitmap().recycle();
                        imageView.setImageDrawable(a.getDrawable(k));
                        imageView.setPadding(20, 0, 0, 0);
                        ll.addView(imageView);
                    }
                    k++;
                }
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }  
    @Override
    public void run() {
        // TODO Auto-generated method stub
    }
}
...