0

Android アプリで GoogleApiClient を使用していますが、アプリの再開時にクラッシュが発生します。

コードは次のようになります。

MainActivity 署名:

public class MainActivity : AppCompatActivity, GoogleApiClient.IOnConnectionFailedListener, Android.Gms.Location.ILocationListener

作成時

protected override async void OnCreate(Bundle bundle)
{
    App.Initialize();
    base.OnCreate(bundle);

    SetContentView(Resource.Layout.Main);

    await InitializeGoogleApis();
}

Google API の初期化

private async Task InitializeGoogleApis()
{
    // Construct api client and request for required api's
    googleApiClientBuilder = new GoogleApiClient.Builder(this)
       .AddApi(LocationServices.API)
       .EnableAutoManage(this, this);

    // Connect to google play services
    googleApiClient = await googleApiClientBuilder
        .BuildAndConnectAsync();

    // Request location api and set common properties
    googleLocationRequest = new LocationRequest()
        .SetPriority(LocationRequest.PriorityHighAccuracy)
        .SetInterval(1000)
        .SetFastestInterval(1000);

    // Set location changed listener
    await LocationServices.FusedLocationApi.RequestLocationUpdatesAsync(googleApiClient, googleLocationRequest, this);
}

OnResume および OnDestroy :

protected override void OnResume()
{
    base.OnResume();
}

protected override async void OnDestroy()
{
    base.OnDestroy();

    if (googleApiClient != null)
        await LocationServices.FusedLocationApi.RemoveLocationUpdatesAsync(googleApiClient, this);
}

すべての例外を有効にしましたが、例外の説明がありません

再開しようとすると、アプリが常にクラッシュします。クラッシュするとバックグラウンドに置かれ、再開しようとすると完全に機能します。

4

1 に答える 1

0

OK、これを回避するハックな方法を見つけました。実装はすべてそのままにして、これらの関数をメインアクティビティに追加しました

protected override void OnStop()
{
    base.OnStop();

    if (googleApiClient != null)
    {
        LocationServices.FusedLocationApi.Dispose();
        googleApiClient.StopAutoManage(this);
        googleApiClient.Disconnect();
        googleApiClient.Dispose();
        googleApiClient = null;
    }
}

protected override async void OnRestart()
{
    base.OnRestart();
    await InitializeGoogleApis();
}

GoogleApiClient を強制的に停止し、OnRestart 関数内で再度初期化します。基本的にそれで私の問題は解決します。

于 2016-05-26T10:26:57.997 に答える