My GamePanel's Surface View show black screen (or don't show at all) on testing
even though every-thing looks fine!! Am i missing something?!
Note:
-I'm testing on my device not emulator.
-I have another 
Activity

 that leads to this class.
-I'm not getting any errors unfortunately.
(thanks advancedly for help)
my 
GamePanel class

 code:
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.util.ArrayList;
import java.util.Random;


public class GamePanel extends SurfaceView implements SurfaceHolder.Callback
{
public static final int WIDTH = 960;
public static final int HEIGHT = 540;
public static final int MoveSpeed = -5;
private long enemyStartTime;
private MainThread thread;
private Background bg;
private Alien alien;
private ArrayList<Enemy> enemy;
private Random rand = new Random();
private Buttons babyButton;

public GamePanel (Context context)
{
   super(context);

   getHolder().addCallback(this);

   setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int wight, int height ){}

@Override
public void surfaceDestroyed(SurfaceHolder holder ){

   boolean retry = true;
   while (retry){
       try { thread.setRunning(false);
           thread.join();
           retry = false;
           thread = null;

       }catch (InterruptedException e) {e.printStackTrace();}
   }
}

@Override
public void surfaceCreated(SurfaceHolder holder ){

   babyButton = new Buttons(BitmapFactory.decodeResource(getResources(), R.drawable.ratebutton),250, 250, 1);
   switch((int) (rand.nextDouble() * 5)) {
       case 0:
           bg = new Background(BitmapFactory.decodeResource(getResources(), R.drawable.backgrounda));
           break;
       case 1:
           bg = new Background(BitmapFactory.decodeResource(getResources(), R.drawable.backgroundb));
           break;
       case 2:
           bg = new Background(BitmapFactory.decodeResource(getResources(), R.drawable.backgroundc));
           break;
       case 3:
           bg = new Background(BitmapFactory.decodeResource(getResources(), R.drawable.backgroundd));
           break;
       case 4:
           bg = new Background(BitmapFactory.decodeResource(getResources(), R.drawable.backgrounde));
           break;
       case 5:
           bg = new Background(BitmapFactory.decodeResource(getResources(), R.drawable.backgroundf));
           break;
   }
   alien = new Alien(BitmapFactory.decodeResource(getResources(), R.drawable.aalien),120, 270, 8);
   enemy = new ArrayList<>();
   enemyStartTime = System.nanoTime();

   thread = new MainThread(getHolder() , this);
   thread.setRunning(true);
   thread.start();
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
   return super.onTouchEvent(event);
}
public void update()
{
   bg.update();
   alien.update();
   babyButton.update();

   long EnemyElapsed = (System.nanoTime() - enemyStartTime)/1000000;
   if (EnemyElapsed > (2000-alien.getScore()/4)) {
       enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.dog), WIDTH + 10,60, 250, 250, alien.getScore(), 2));
       enemyStartTime = System.nanoTime();
   }
   for (int i= 0; i<enemy.size(); i++) {
       enemy.get(i).update();
       if (collision(enemy.get(i), alien)) ;
       {
           enemy.remove(i);
           break;
       }
   }

   for (Enemy m : enemy)
   {
       m.update();
   }
}
public boolean collision (GameObject a, GameObject b)
{
   if(Rect.intersects(a.getRectangel(), b.getRectangel()))
   {
       return true;
   }
   return false;
}

@Override
public void draw(Canvas canvas) {
   final float scaleFactoryX = getWidth() / (WIDTH * 1.f);
   final float scaleFactoryY = getHeight() / (HEIGHT * 1.f);
   if (canvas != null) {
       final int savedState = canvas.save();
       canvas.scale(scaleFactoryX, scaleFactoryY);
       bg.draw(canvas);
       alien.draw(canvas);
       babyButton.draw(canvas);
       for (Enemy m : enemy) {
           m.draw(canvas);
       }
       canvas.restoreToCount(savedState);
   }

}

public void drawText(Canvas canvas) {
   Paint paint = new Paint();
   paint.setColor(Color.GREEN);
   paint.setTextSize(35);
   paint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
   canvas.drawText("DISTANCE" + alien.getScore(), 10, 10, paint);
}