Приложение аварийно завершает работу, когда на некоторых устройствах вызывается действие onCreate().

Наше приложение вылетает на некоторых устройствах после экрана загрузки. На наших тестовых устройствах он работает без сбоев, поэтому мы не можем предоставить logcat с ошибками. Итак, единственная проблема заключается в том, что наше приложение вылетает на некоторых устройствах после вызова метода onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setVolumeControlStream(AudioManager.STREAM_MUSIC);

    WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    screenWidth = size.x;
    screenHeight = size.y;
    screenSizeAverage = (screenWidth + screenHeight) / 2;

    this.gameStatus = 5;
    this.isEnemiesStarted = false;
    this.score = 0;
    this.playerPos = 0;

    prefs = this.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE);
    bestScore = prefs.getInt("key", 0);

    gameView = new GameView(this.getApplicationContext(), this);
    gameView.setOnTouchListener(new View.OnTouchListener(){

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if(event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
                if(gameStatus == 1){
                    if(isEnemiesStarted == false){
                        isEnemiesStarted = true;
                    }
                    if(event.getX() < screenWidth / 2 && event.getY() < screenHeight / 2) {
                        if(playerPos != 1){
                            gameView.setPlayerPos(screenSizeAverage / 8, screenSizeAverage / 8);
                            playerPos = 1;
                            score++;
                            gameView.playSound(1);
                        }
                    }
                    else if(event.getX() > screenWidth / 2 && event.getY() < screenHeight / 2) {
                        if(playerPos != 2){
                            gameView.setPlayerPos(screenWidth - screenSizeAverage / 8 - gameView.getPlayerWidth(), screenSizeAverage / 8);
                            playerPos = 2;
                            score++;
                            gameView.playSound(1);
                        }
                    }
                    else if(event.getX() < screenWidth / 2 && event.getY() > screenHeight / 2) {
                        if(playerPos != 3){
                            gameView.setPlayerPos(screenSizeAverage / 8, screenHeight - screenSizeAverage / 8 - gameView.getPlayerWidth());
                            playerPos = 3;
                            score++;
                            gameView.playSound(1);
                        }
                    }
                    else if(event.getX() > screenWidth / 2 && event.getY() > screenHeight / 2) {
                        if(playerPos != 4){
                            gameView.setPlayerPos(screenWidth - screenSizeAverage / 8 - gameView.getPlayerWidth(), screenHeight - screenSizeAverage / 8 - gameView.getPlayerWidth());
                            playerPos = 4;
                            score++;
                            gameView.playSound(1);
                        }
                    }
                }
            }

            else if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
                if(gameStatus == 3){
                    if(gameView.getLoadStatus() == 2){
                        gameView.closeGameOver();
                        gameView.playSound(2);
                    }
                }
                else if(gameStatus == 4){
                    if(gameView.getLoadStatus() == 1){
                        gameView.setBestScore(bestScore);
                        gameView.setLoadStatus(2);
                    } else if(gameView.getLoadStatus() == 2){
                        gameView.restartGame();
                        gameView.setLoadStatus(0);
                        gameView.playSound(2);
                    }
                }
            }

            return true;
        }

    });
    setContentView(gameView);    

person Petr Župka    schedule 09.11.2014    source источник
comment
покажи свой код для oncreate   -  person raj    schedule 09.11.2014
comment
если у вас нет журналов ошибок, вставьте импорт.   -  person Nitin Misra    schedule 09.11.2014
comment
Используйте ACRA для получения журналов сбоев.   -  person 323go    schedule 09.11.2014


Ответы (1)


У меня такая же проблема на Samsung Galaxy S4 Mini. Проблема в том,

display.getSize(size);

Я не знаю почему. Для меня

DisplayMetrics metrics = context.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;

работает.

person Thomas Sablik    schedule 07.03.2015