2017-12-26 8 views
1

내 앱은 GoogleApiClient을 사용하여 현재 위치를 가져옵니다. 그것은 처음에는 잘 작동하지만 내 응용 프로그램을 닫은 다음 다시 열면 충돌이 발생합니다 (Sony Xperia Z3, Google Pixel).GoogleApiClient.connect()가 충돌을 일으킴

아수스, 삼성에

... 내가 또한 최신 Google API 11.8.0try-catch 업데이트를 사용할 수는 없지만,

android.os.DeadObjectException 
                at android.os.BinderProxy.transactNative(Native Method) 
                at android.os.BinderProxy.transact(Binder.java:503) 
                at android.view.IWindow$Stub$Proxy.onAnimationStopped(IWindow.java:534) 
                at com.android.server.wm.WindowAnimator.updateWindowsLocked(WindowAnimator.java:286) 
                at com.android.server.wm.WindowAnimator.animateLocked(WindowAnimator.java:678) 
                at com.android.server.wm.WindowAnimator.access$000(WindowAnimator.java:53) 
                at com.android.server.wm.WindowAnimator$1.doFrame(WindowAnimator.java:123) 
                at android.view.Choreographer$CallbackRecord.run(Choreographer.java:856) 
                at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
                at android.view.Choreographer.doFrame(Choreographer.java:603) 
                at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
                at android.os.Handler.handleCallback(Handler.java:739) 
                at android.os.Handler.dispatchMessage(Handler.java:95) 
                at android.os.Looper.loop(Looper.java:234) 
                at android.os.HandlerThread.run(HandlerThread.java:61) 
                at com.android.server.ServiceThread.run(ServiceThread.java:46) 

나는 충돌이 GoogleApiClient.connect()입니다 원인 코드의 라인을 발견 충돌하지 않습니다 가능한 해결책을 찾으십시오. 여기에 내 코드

@Override 
public void onLocationChanged(Location location) { 
    if (location != null) { 
     Log.v(">>>", "onLocationChanged Longitude = " + Constants.location.getLongitude() + ", Latitude = " + Constants.location.getLatitude()); 
     //Toast.makeText(this, "onLocationChanged Longitude = " + Constants.location.getLongitude() + ", Latitude = " + Constants.location.getLatitude(), Toast.LENGTH_SHORT).show(); 
     saveLocation(location); 
    } 
} 

@Override 
public void onConnected(@Nullable Bundle bundle) { 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
      && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     return; 
    } 
    if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) { 
     try { 
      Location mLastLocation = LocationServices.FusedLocationApi 
        .getLastLocation(mGoogleApiClient); 
      if (mLastLocation != null) {...} 

       //Toast.makeText(this, "onConnected Longitude = " + Constants.location.getLongitude() + ", Latitude = " + Constants.location.getLatitude(), Toast.LENGTH_SHORT).show(); 
      } 
      startLocationUpdates(); 
     } catch (Exception ex) { 
      // This will catch the exception, handle as needed 
     } 
    } 
    //Toast.makeText(this, "onConnected", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onConnectionSuspended(int i) { 
    mGoogleApiClient.connect(); 
} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
    Log.d("Location service", "onConnectionFailed"); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    checkPlayServices(); 
    // Resuming the periodic location updates 
    if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) { 
     startLocationUpdates(); 
    } 
    Log.v(">>>", "onResume"); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    if (mGoogleApiClient != null) { 
     mGoogleApiClient.connect(); // CRASH HERE 
     Log.v(">>>", "GoogleApiClient.connect()"); 
    } 
    Log.v(">>>", "onStart"); 
} 

@Override 
protected void onStop() { 
    if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.disconnect(); 
     mGoogleApiClient = null; 
     Log.v(">>>", "GoogleApiClient.disconnect()"); 
    } 
    super.onStop(); 
    Log.v(">>>", "onStop"); 
} 

@Override 
protected void onPause() { 
    stopLocationUpdates(); 
    super.onPause(); 
    Log.v(">>>", "onPause"); 
} 
+0

Google 픽셀 및 Sony Xperia Z3의 OS 버전은 무엇입니까? – Soham

+0

Android 6에서 그런 상황에 처한 적이 있습니까? – nightmaregiba

+0

안드로이드 6에서는 안된다.하지만 최근에 나는 오레오에서 이와 같이 직면했다. 그래서 그것이 내가 묻는 이유이다. – Soham

답변

0

onLocationChanged (location)에서 saveLocation (location)은 RealmIO를 사용하여 사용자의 마지막 위치를 저장합니다.

saveLocation (location)을 제거하면 모든 것이 잘 작동합니다.

은 내가 데이터를 저장 (GSON로 된 SharedPreferences) (RealmIO) 또는를 사용하는 경우, 문제가 발생하는 것을 발견

임시 솔루션 GSON없이 된 SharedPreferences를 사용하고 있습니다 :

SharedPreferences prefs = context.getSharedPreferences(
      LAST_LOCATION, Context.MODE_PRIVATE); 
    prefs.edit().putString(LAST_LOCATION_LONGITUDE, location.getLongitude() + "").apply(); 
    prefs.edit().putString(LAST_LOCATION_LATITUDE, location.getLatitude() + "").apply(); 

난 몰라 특정 장치에서 충돌이 발생한 이유를 알아보십시오. 희망이 사람을 도와주세요!

0

DeadObjectException - 당신은 호출하는 객체는 호스팅 프로세스가 더 이상 exists.That 서비스가 이미 중지 없었다 때문에, 사망 한 - 중 사망 OS에서, 또는 응용 프로그램에서 중단되었습니다.

onDestroy() 메서드를 재정의하고 DeadObjectException으로 연결되는 이벤트를 확인합니다. 이 방법을 사용하지 않고 DeadObjectException을 잡으면 OS가 서비스를 종료해야합니다.

+0

안녕하세요, onDestroy에 일부 텍스트를 기록하면 로그가 표시됩니다. 어떻게해야합니까? – nightmaregiba

+0

Remocing 시도 mGoogleApiClient = null; onStop() 메소드에서. 그냥 시도해보십시오 –

+0

너무 효과가 없습니다. 아이디어가 있습니까? 감사합니다 – nightmaregiba