2012-02-07 12 views
-1

最近このアプリで作業を始めました。画面上に小さなジョイスティックを表示し、矢印を押すとアンドロイドアイコンが移動しました。私のアンドロイドアプリが使用するメモリの量を減らす方法

これはエミュレータでうまく動作しますが、すぐに私の携帯電話でそれを試すとすぐにクラッシュします 私のプログラムはメモリを使用していると推測していますので、どうすればこれを制限できますか? おかげ

package net.jegard.software.zombie.main; 

import java.util.Timer; 
import java.util.TimerTask; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.view.MotionEvent; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

    public class zombView extends SurfaceView{ 
     private Bitmap bmp, grass, joystick; 
     private SurfaceHolder holder; 
     Timer t = new Timer(); 
     float x = 0, y = 0; 
     boolean forward, left, down, right; 
     public zombView(Context context) { 
       super(context); 
       holder = getHolder(); 
       holder.addCallback(new SurfaceHolder.Callback() { 

        @Override 
        public void surfaceDestroyed(SurfaceHolder holder) { 
        } 

        @Override 
        public void surfaceCreated(final SurfaceHolder holder) { 


         t.scheduleAtFixedRate(new TimerTask(){ 
          public void run(){ 
          Canvas c = holder.lockCanvas(null); 
          onDraw(c); 
          holder.unlockCanvasAndPost(c); 
          onTouchEvent(null); 
         } 
        },200,100); 
        } 
        @Override 
        public void surfaceChanged(SurfaceHolder holder, int format, 
            int width, int height) { 
        } 
       }); 
       bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
       grass = BitmapFactory.decodeResource(getResources(), R.drawable.grassland); 
       joystick = BitmapFactory.decodeResource(getResources(), R.drawable.joystic); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) { 
       canvas.drawColor(Color.BLACK); 
       canvas.drawBitmap(grass, getWidth() - getWidth(), getHeight() - getHeight(), null); 
       canvas.drawBitmap(joystick, getWidth() - getWidth(),joystick.getHeight(), null); 
       canvas.drawBitmap(bmp, x, y, null); 
       if(right){ 
        x = x + 10; 
       } 
       if(forward){ 
       y = y - 10; 
       }if(left){ 
       x = x - 10; 
       }if(down){ 
       y = y + 10; 
       } 
     } 
     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
      switch (event.getAction() & MotionEvent.ACTION_MASK) { 
      case MotionEvent.ACTION_DOWN: 
       float tx = event.getX(); 
       float ty = event.getY(); 
       if(tx > (joystick.getWidth()/3)*2 && tx < (joystick.getWidth()/3)*3 && ty > (getHeight() - joystick.getHeight()) + (joystick.getHeight()/3) && ty < (getHeight() - joystick.getHeight()) + (joystick.getHeight()/3)*2){ 
         touch_right(tx, ty); 
         invalidate(); 
       }if(tx > (joystick.getWidth()/3) && tx < (joystick.getWidth()/3)*2 && ty > (getHeight() - joystick.getHeight()) && ty < (getHeight() - joystick.getHeight()) + (joystick.getHeight()/3)){ 
         touch_forward(tx, ty); 
         invalidate(); 
       }if(tx > (joystick.getWidth() - joystick.getWidth()) && tx < (joystick.getWidth()/3) && ty > (getHeight() - joystick.getHeight()) + (joystick.getHeight()/3) && ty < (getHeight() - joystick.getHeight()) + (joystick.getHeight()/3)*2){ 
        touch_left(tx, ty); 
        invalidate(); 
       }if(tx > (joystick.getWidth()/3) && tx < (joystick.getWidth()/3)*2 && ty > ((getHeight() - joystick.getHeight()) + (joystick.getHeight()/3)*2) && ty < (getHeight() - joystick.getHeight()) + (joystick.getHeight())){ 
        touch_down(tx, ty); 
        invalidate(); 
       } 
       break; 
      case MotionEvent.ACTION_MOVE: 
       touch_move(); 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_UP: 
       touch_up(); 
       invalidate(); 
       break; 
      } 
      return true; 
     } 

     private void touch_right(float x2, float y2) { 
      right = true; 

     } 
     private void touch_left(float x2, float y2) { 
      left = true; 

     } 
     private void touch_down(float x2, float y2) { 
      down = true; 

     } 
     private void touch_forward(float x2, float y2) { 
      forward = true; 

     } 
     private void touch_move() { 
      touch_up(); 

     } 

     private void touch_up() { 
      forward = false; 
      right = false; 
      down = false; 
      left = false; 


     } 
    } 
+3

いつものように、あなたが質問しているAndroidでクラッシュしているときはいつでも、LogCatからスタックトレースを投稿してください。 – kabuko

答えて

0

は、それがすべてでメモリの問題ではないかもしれない、デバッグモードでお使いの携帯電話を接続しようとすると、ログを確認してください。それはあなたに本当の問題の明確なイメージを与えます。

+0

どうすればいいですか? – user1068310

+0

お使いの携帯電話では、 "設定 - >アプリケーション - >開発 - > USBデバッグ"を有効にして、EclipseでDDMSビューに移動し、お使いの携帯電話を選択します。 –

関連する問題