асинхронный метод не работает в фоновом сервисе Android Xamarin - PullRequest
0 голосов
/ 27 июня 2018

я использую следующий код

public override IBinder OnBind(Intent intent)
{
    return null;
}


public static int ConvertMinutesToMilliseconds(int minutes)
{
    return (int)TimeSpan.FromMinutes(minutes).TotalMilliseconds;
}
System.Threading.Timer _timer;
public override StartCommandResult OnStartCommand(Android.Content.Intent intent, StartCommandFlags flags, int startId)
{
    DoWork();
    _timer = new System.Threading.Timer((o) => {
      SyncStepsToApi();
    }, null, 0, 20000);

    return StartCommandResult.Sticky;
}


public async void SyncStepsToApi()
        {
            SaveEmployeeActivities saveEmployeeActivities = new SaveEmployeeActivities();

            saveEmployeeActivities.AuthenticationToken = APICalling.authToken;
            saveEmployeeActivities.Steps =await db.GetUserSteps();
           var numberOfActivitiesModified= await ServiceClient.SaveUserActivity(saveEmployeeActivities);
            Notification.Builder notificationBuilder = new Notification.Builder(this)
          .SetSmallIcon(Resource.Drawable.screen)
          .SetContentTitle("perkit service notification")
          .SetContentText(numberOfActivitiesModified.NoOfActivitiesModified.ToString());

            var notificationManager = (NotificationManager)GetSystemService(NotificationService);
            notificationManager.Notify(19000, notificationBuilder.Build());
        }

для запуска фона службы, все работает нормально, кроме SyncStepsToApi();, этот метод вызывается только тогда, когда приложение остается на переднем плане. когда я закрываю, приложение работает нормально, за исключением того, что в syncsteptoapi (db.getusersteps) возвращает 0 записей.

...