【问题标题】:App crashes when the activity onCreate() is called on some devices在某些设备上调用活动 onCreate() 时应用程序崩溃
【发布时间】:2014-11-09 14:36:55
【问题描述】:

加载屏幕后,我们的应用在某些设备上崩溃。 它在我们的测试设备上运行顺利,因此我们无法向 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);    

【问题讨论】:

  • 显示你的 oncreate 代码
  • 如果您没有错误日志,请粘贴您的导入。
  • 使用 ACRA 获取崩溃日志。

标签: android methods crash device oncreate


【解决方案1】:

我在三星 Galaxy S4 Mini 上遇到了同样的问题。问题是

display.getSize(size);

我不知道为什么。对我来说

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

有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多