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