2015-02-17 5 views
2

Я пытаюсь получить действительно простое приложение с запуском перечисления google Task. У меня есть SQLite local db Я бы хотел синхронизировать/попробовать синхронизацию с регулярным интервалом с сервером Google.Xamarin.Forms Background Thread

Я думал просто запустить простой поток фона, чтобы он легко работал на всех устройствах.

Проблема сводится к созданию этой фоновой нити в проекте PCL (Xamarin.Forms) Кажется, я не могу найти правильный способ ее создания.

В настоящее время я просто второй поток работает как таковой:

private bool Sync() { //Does stuffs } 

    private void SynchronizeData() 
    { 
     // Repeats sync process every 35s 
     Device.StartTimer (new TimeSpan (0, 0, 35), Sync); 
    } 

    // Is called pretty much when app starts. 
    private void StartSynchronizationThread() 
    { 
     Task.Factory.StartNew(SynchronizeData, 
      CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); 
    } 

Хотя он должен в любом случае не может быть большой проблемой, учитывая количество операций действительно низкий (в худшем случае для целей тестирования, было бы меньше блокировка секунд), я испытываю значительное замораживание моего приложения, когда поток запускается первым. (Таймер, истекающий в первый раз) Замораживание продолжается в течение хорошей минуты ...

После того, как это произошло, я могу оставаться в приложении в основном навсегда без единой проблемы. Я заметил, что появляется следующее довольно поздно, хотя:

[искусство] Thread [2, TID = 2532, WaitingInMainSignalCatcherLoop, Thread * = 0xee170800, равный = 0x12c00080, "Сигнал Catcher"]: реагирует на сигнал 3 [ art] Написал трассировки стека до '/data/anr/traces.txt' [art] Написал трассировки стека до '/data/anr/traces.txt' [art] Тема [2, tid = 2532, WaitingInMainSignalCatcherLoop, Thread * = 0xee170800, равный = 0x12c00080, "Сигнал пропастью"]: реагирует на сигнал 3 [искусство] Написал трассировки стека, чтобы '' /data/anr/traces.txt

Следы на самом деле не дают мне больше информации, хотя ... Но это, вероятно, связано с этим.

Как любой намек на этот вопрос? Пакет, пример кода или что-нибудь еще? Надеюсь, я пропустил что-то большое.

Спасибо.

ответ

1

Работая как очарование на самом устройстве, проблема была связана с эмулятором. (Не нашли исправление для него, хотя)

0

В Xamarin формы вы должны пойти родной для надлежащего фоновой задачи, как описано здесь: Backgrounding with Xamarin Forms

Пойти Уроженец вам нужно использовать Xamarin MessagingCenter для отправки сообщения взад и вперед по соответствующей фоновой задаче (в зависимости от того, чего вы пытаетесь достичь). Например, определение службы в Android:

[Service] 
class YourService : Service 
{ 
    public override IBinder OnBind(Intent intent) 
    { 
     return null; 
    } 

    public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId) 
    { 
     // Do your thang! 
    } 
} 
+0

Спасибо за ваш ответ, к сожалению, я это было сделано какое-то время, прежде чем вы ответили и не могли дать попробовать на ваше решение, но я прослежу, чтобы попробовать его если это когда-либо проявляется: P Надеюсь, это может привести других людей на правильный путь, хотя D – MagiKruiser