Приложение аварийно завершает работу при использовании GoogleApiClient

Я использую GoogleApiClient в своем приложении для Android и испытываю сбой при возобновлении работы моего приложения.

Код выглядит так:

MainActivity подпись:

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

OnCreate

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);
}

У меня включены все исключения, но нет описания исключений

Приложение всегда падает, когда я пытаюсь возобновить. Когда он падает, он помещается в фоновом режиме, и когда я пытаюсь возобновить его снова, он работает отлично.

1 ответ

Решение

Хорошо, я нашел способ обойти это, я оставил все свои реализации одинаковыми, просто добавил эти функции в основную деятельность

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. Настолько, что это решает мою проблему.

Другие вопросы по тегам