마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

갤럭시 s5에서 되던 앱이 갤럭시 s8에서 안되는 현상 [closed]

0 추천

현재 관리자용 사용자용 앱을 만들어 테스트를 하고 있는데

갤럭시 5에서는 두 앱 모두 사용이 잘 되는데

갤럭시 8에서는 사용자 앱은 잘 되는데 관리자 앱을 실행하면 바로 멈춰버립니다.

스플래쉬 화면 시작이 바로 멈추는데

일정 sdk 이상부터는 권한 선언에 있어 다른 방식으로 줘야한다고 본거 같은데

유저앱에서는 이상 없는데 관리자 앱에서만 충돌이 나는 이유가 있을까요? (스플래쉬 코드 부분은 두개 다 동일)

밑에가 스플래쉬 화면 코드 입니다.

 

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

        view = getLayoutInflater().from(this).inflate(R.layout.splash_view, null);
        setContentView(view);

        getWindow().setFlags( // 추가

                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        int permissionCheck = ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_COARSE_LOCATION);

        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,
                        Manifest.permission.READ_PHONE_STATE},
                MY_PERMISSIONS_REQUEST_COARSE_LOCATION);

        final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

        mBluetoothAdapter = bluetoothManager.getAdapter();
        if (mBluetoothAdapter == null |
                !getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
            finish();
            return;
        }

        int SDK_INT = android.os.Build.VERSION.SDK_INT;

        if (SDK_INT < Build.VERSION_CODES.M)
        {
            new Handler().postDelayed(new Runnable(){
                @Override
                public void run() {

                    Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);
                    SplashActivity.this.startActivity(mainIntent);
                    SplashActivity.this.finish();
                    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
                    view = null;
                }
            }, SPLASH_DISPLAY_DELAY_TIME);
        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_COARSE_LOCATION: {
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    new Handler().postDelayed(new Runnable(){
                        @Override
                        public void run() {

                            Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);
                            SplashActivity.this.startActivity(mainIntent);
                            SplashActivity.this.finish();
                            view = null;
                        }
                    }, SPLASH_DISPLAY_DELAY_TIME);


                } else {
                    finish();
                }
                return;
            }
        }
    }
}

 

에러 로그에는


05-30 10:48:17.577 E/AndroidRuntime: FATAL EXCEPTION: main
                                     Process: passtech.passtech_manager_app, PID: 5833
                                     java.lang.RuntimeException: Canvas: trying to draw too large(108800000bytes) bitmap.
                                         at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:229)
                                         at android.view.RecordingCanvas.drawBitmap(RecordingCanvas.java:97)
                                         at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:529)
                                         at android.widget.ImageView.onDraw(ImageView.java:1367)
                                         at android.view.View.draw(View.java:20352)
                                         at android.view.View.updateDisplayListIfDirty(View.java:19297)
                                         at android.view.View.draw(View.java:20075)
                                         at android.view.ViewGroup.drawChild(ViewGroup.java:4421)

이하 생략


이렇게 나옵니다. 

 

문제점으로 보이는 문구는 'java.lang.RuntimeException: Canvas: trying to draw too large(108800000bytes) bitmap.' 인데

 

이 앱은 이미지뷰에 사진이 들어가는 ui정도만 구성되어 있고(그림을 그리거나 비트맵 사용 x)

사진 용량도 줄이기 위해 webp로 바꿔 사용하고 있습니다.

혹시 이 문제 해결 방법이 있을까요...?

질문을 종료한 이유: 자문자답
yt0229 (1,070 포인트) 님이 2019년 5월 30일 질문
yt0229님이 2019년 5월 30일 closed
자문자답 합니다. 해상도가 큰 파일이 그냥 'drawable' 폴더에 들어가 있어서 그랬네요. 해상도 큰 파일을 'drawable-xxhdpi' 폴더로 옮기니 정상작동했습니다. 갤럭시 s5에서는 왜 안옮겨도 됐는지는 의문이네요..
...