Xamarin.Forms 后台线程

Xamarin.Forms Background Thread

我正在尝试获得一个非常简单的应用程序 运行 列表 google 任务。 我有一个 SQLite 本地数据库,我想同步/尝试定期与 Google 的服务器同步。

我只想 运行 一个简单的后台线程,这样它就可以在所有设备上轻松运行。

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

尽管考虑到操作计数确实很低(最坏的测试情况下阻塞时间不到一秒),但无论如何这应该不是什么大问题,但我在线程应该运行时遇到了我的应用程序的大规模冻结运行 第一。 (定时器第一次到期) 冻结持续了好一分钟...

一旦它发生,我就可以永远留在应用程序上,而不会出现任何问题。不过,我注意到以下内容出现得比较晚:

[art] Thread[2,tid=2532,WaitingInMainSignalCatcherLoop,Thread*=0xee170800,peer=0x12c00080,"Signal Catcher"]: reacting to signal 3 [art] Wrote stack traces to '/data/anr/traces.txt' [art] Wrote stack traces to '/data/anr/traces.txt' [art] Thread[2,tid=2532,WaitingInMainSignalCatcherLoop,Thread*=0xee170800,peer=0x12c00080,"Signal Catcher"]: reacting to signal 3 [art] Wrote stack traces to '/data/anr/traces.txt'

虽然痕迹并没有真正给我更多的信息.​​..... 但这可能与它有关。

有人对这件事有什么暗示吗?包、代码示例或任何东西? 希望我错过了一些大事;

谢谢。

在实际设备上运行正常,问题与模拟器有关。 (虽然还没有找到解决办法)

在 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!
    }
}