java.lang.OutOfMemoryError(surfaceview类)

java.lang.OutOfMemoryError(surfaceview类),java,android,bitmap,surfaceview,Java,Android,Bitmap,Surfaceview,我有一个扩展surfaceview的类,在应用程序崩溃几次后,我从该类开始另一个活动 这是我的日志: 01-02 21:37:16.332: E/AndroidRuntime(28449): FATAL EXCEPTION: main 01-02 21:37:16.332: E/AndroidRuntime(28449): java.lang.OutOfMemoryError 01-02 21:37:16.332: E/AndroidRuntime(28449): at android.g

我有一个扩展surfaceview的类,在应用程序崩溃几次后,我从该类开始另一个活动

这是我的日志:

01-02 21:37:16.332: E/AndroidRuntime(28449): FATAL EXCEPTION: main
01-02 21:37:16.332: E/AndroidRuntime(28449): java.lang.OutOfMemoryError
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:472)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:502)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at com.DainiusSal.simplegame.Zaisti.<init>(Zaisti.java:39)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at com.DainiusSal.simplegame.Leidejas.onCreate(Leidejas.java:24)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.app.Activity.performCreate(Activity.java:5372)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.app.ActivityThread.access$700(ActivityThread.java:159)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.os.Looper.loop(Looper.java:176)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at android.app.ActivityThread.main(ActivityThread.java:5419)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at java.lang.reflect.Method.invokeNative(Native Method)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at java.lang.reflect.Method.invoke(Method.java:525)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
01-02 21:37:16.332: E/AndroidRuntime(28449):    at dalvik.system.NativeStart.main(Native Method) 
01-02 21:37:16.332:E/AndroidRuntime(28449):致命异常:main
01-02 21:37:16.332:E/AndroidRuntime(28449):java.lang.OutOfMemoryError
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.graphics.BitmapFactory.NativeDeacSet(本机方法)
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596)
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.graphics.BitmapFactory.DecodeSourceStream(BitmapFactory.java:444)
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:472)上
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:502)上
01-0221:37:16.332:E/AndroidRuntime(28449):位于com.DainiusSal.simplegame.Zaisti.(Zaisti.java:39)
01-02 21:37:16.332:E/AndroidRuntime(28449):位于com.DainiusSal.simplegame.Leidejas.onCreate(Leidejas.java:24)
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.app.Activity.performCreate(Activity.java:5372)上
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
01-02 21:37:16.332:E/AndroidRuntime(28449):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.app.ActivityThread.access$700(ActivityThread.java:159)
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.os.Handler.dispatchMessage(Handler.java:99)上
01-02 21:37:16.332:E/AndroidRuntime(28449):在android.os.Looper.loop(Looper.java:176)上
01-02 21:37:16.332:E/AndroidRuntime(28449):位于android.app.ActivityThread.main(ActivityThread.java:5419)
01-02 21:37:16.332:E/AndroidRuntime(28449):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-02 21:37:16.332:E/AndroidRuntime(28449):在java.lang.reflect.Method.invoke(Method.java:525)
01-02 21:37:16.332:E/AndroidRuntime(28449):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
01-02 21:37:16.332:E/AndroidRuntime(28449):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
01-02 21:37:16.332:E/AndroidRuntime(28449):在dalvik.system.NativeStart.main(本机方法)
Zaisti.java类中的我的代码:

public class Zaisti extends SurfaceView implements Runnable{

Bitmap kamuolys = BitmapFactory.decodeResource(getResources(), R.drawable.green);
Bitmap  kliutis = BitmapFactory.decodeResource(getResources(), R.drawable.purple);
Bitmap bg = BitmapFactory.decodeResource(getResources(), R.drawable.background);

public Zaisti(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        laikytojas = getHolder();

    }

public void pause() {
        veikia = false;

        if(mThread!=null){
            try {
                mThread.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        mThread = null;
    }

    public void resume() {  
        score = 0;
        veikia = true;
        mThread = new Thread(this);
        mThread.start();

    }

    public void run() {
        // TODO Auto-generated method stub

        bg = Bitmap.createScaledBitmap(bg, width, height, false);
        kamuolys = Bitmap.createScaledBitmap(kamuolys,(int) (kamuolys.getWidth()/1.5),(int) (kamuolys.getHeight()/1.5), false);

    while (veikia) {
            if (!laikytojas.getSurface().isValid()) {
                continue;
            }


            Canvas drobe = laikytojas.lockCanvas();

            //background
            drobe.drawBitmap(bg, 0, 0, null);

            drobe.drawBitmap(kamuolys, 50, yk, null);


            drobe.drawBitmap(kliutis, kliuties, virsus, null);
            drobe.drawBitmap(kliutis, kliuties1, virsus1, null);
            drobe.drawBitmap(kliutis, kliuties2, virsus2, null);
            drobe.drawBitmap(kliutis, kliuties3, virsus3, null);

        if (yk > (virsus + kamuolys.getHeight()) || (yk + kamuolys.getHeight()) < virsus) {

            } else {
                if (50 > (kliuties + kamuolys.getWidth()) || (50 + kamuolys.getWidth()) < kliuties) {

                } else {
                    veikia = false;
                }
            }

            if (yk > (virsus1 + kamuolys.getHeight()) || (yk + kamuolys.getHeight()) < virsus1) {

            } else {
                if (50 > (kliuties1 + kamuolys.getWidth()) || (50 + kamuolys.getWidth()) < kliuties1) {

                } else {
                    veikia = false;
                }
            }

            if (yk > (virsus2 + kamuolys.getHeight()) || (yk + kamuolys.getHeight()) < virsus2) {

            } else {
                if (50 > (kliuties2 + kamuolys.getWidth()) || (50 + kamuolys.getWidth()) < kliuties2) {

                } else {
                    veikia = false;
                }
            }

            if (yk > (virsus3 + kamuolys.getHeight()) || (yk + kamuolys.getHeight()) < virsus3) {

            } else {
                if (50 > (kliuties3 + kamuolys.getWidth()) || (50 + kamuolys.getWidth()) < kliuties3) {

                } else {
                    veikia = false;
                }
            }

           laikytojas.unlockCanvasAndPost(drobe);


        }

    Intent intent = new Intent().setClass(getContext(), Pabaiga.class);
    getContext().startActivity(intent);
    ((Activity) getContext()).finish();
}
public class Leidejas extends Activity implements OnTouchListener{

    Zaisti vaizdas;
    float y=0,y1=0;
    int musicid = 0;
    SoundPool sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);


        vaizdas = new Zaisti(this);
        vaizdas.setOnTouchListener(this);
        setContentView(vaizdas);

        //load music
        sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
        musicid = sp.load(this, R.raw.kulka, 1);

    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();    
        vaizdas.pause();
    }


    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        vaizdas.resume();
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub

        switch(event.getAction()){

        case MotionEvent.ACTION_DOWN:
            y = event.getY();
            break;
        case MotionEvent.ACTION_UP:
            y1 = event.getY();

        if(y<y1){
            //zemyn
        while(vaizdas.yk < ((vaizdas.height/2)+1))  {

        vaizdas.yk += 0.0005;
        }

        //play sound
        if(musicid!=0)
        sp.play(musicid, 1, 1, 0, 0, 1);

        }else if(y>y1){
            //aukstyn
            while(vaizdas.yk > ((vaizdas.height/2)-(vaizdas.kamuolys.getHeight()))) {   

                vaizdas.yk -= 0.0005;
                }

            //play sound
            if(musicid!=0)
            sp.play(musicid, 1, 1, 0, 0, 1);

        }
        break; 
        }



        return true;
    }


}
公共类Zaisti扩展了SurfaceView实现Runnable{
位图kamuolys=BitmapFactory.decodeResource(getResources(),R.drawable.green);
位图kliutis=BitmapFactory.decodeResource(getResources(),R.drawable.purple);
位图bg=BitmapFactory.decodeResource(getResources(),R.drawable.background);
公共Zaisti(上下文){
超级(上下文);
//TODO自动生成的构造函数存根
laikytojas=getHolder();
}
公共空间暂停(){
维基亚=假;
if(mThread!=null){
试一试{
mThread.join();
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
mThread=null;
}
公共无效恢复(){
得分=0;
维基亚=真;
mThread=新线程(此线程);
mThread.start();
}
公开募捐{
//TODO自动生成的方法存根
bg=Bitmap.createScaledBitmap(bg,宽度,高度,false);
kamuolys=Bitmap.createScaledBitmap(kamuolys,(int)(kamuolys.getWidth()/1.5),(int)(kamuolys.getHeight()/1.5),false);
while(维基亚){
如果(!laikytojas.getSurface().isValid()){
继续;
}
Canvas drobe=laikytojas.lockCanvas();
//背景
drobe.drawBitmap(bg,0,0,null);
drobe.drawBitmap(kamuolys,50,yk,null);
drobe.drawBitmap(kliutis、kliuties、virsus、null);
drobe.drawBitmap(kliutis,kliuties1,virsus1,null);
drobe.drawBitmap(kliutis,kliuties2,virsus2,null);
drobe.drawBitmap(kliutis,kliuties3,virsus3,null);
如果(yk>(virsus+kamuolys.getHeight())| |(yk+kamuolys.getHeight())(kliuties+kamuolys.getWidth())| |(50+kamuolys.getWidth())(virsus1+kamuolys.getHeight())| |(yk+kamuolys.getHeight())(kliuties1+kamuoys.getWidth())| |(50+kamuoys.getWidth())(virsus2+kamuolys.getHeight())| |(yk+kamuolys.getHeight())(kliuties2+kamuoys.getWidth())| |(50+kamuoys.getWidth())(virsus3+kamuolys.getHeight())| |(yk+kamuolys.getHeight())(kliuties3+kamuoys.getWidth())| |(50+kamuoys.getWidth())
来自Leidejas.java的代码