2017-12-26 11 views
1

私のアプリはGoogleApiClientを使用して現在地を取得します。最初はうまくいきますが、アプリを閉じてもう一度開くとクラッシュします(Sony Xperia Z3、Google Pixel)。 Asusの、サムスンにGoogleApiClient.connect()がクラッシュする

、...それは

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) 

をクラッシュしない、私はまた、try-catchを使用し、最新のGoogle API 11.8.0に更新することはできませんが、クラッシュが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

関連する問題