【发布时间】:2015-02-17 16:51:46
【问题描述】:
我正在尝试让一个非常简单的应用程序运行列出 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);
}
虽然考虑到操作计数真的很低(最坏的情况是测试目的,它会阻塞不到一秒),但无论如何它应该不是什么大问题. (定时器第一次到期) 冻结持续了一分钟......
一旦发生,我几乎可以永远留在应用程序上,而不会出现任何问题。我注意到以下内容出现得很晚:
[艺术] 线程[2,tid=2532,WaitingInMainSignalCatcherLoop,线程*=0xee170800,peer=0x12c00080,"信号 捕手”]:对信号 3 做出反应 [艺术] 将堆栈跟踪写入 '/data/anr/traces.txt' [art] 将堆栈跟踪写入 '/data/anr/traces.txt' [艺术] 线程[2,tid=2532,WaitingInMainSignalCatcherLoop,线程*=0xee170800,peer=0x12c00080,"信号 捕手”]:对信号 3 做出反应 [艺术] 将堆栈跟踪写入 '/data/anr/traces.txt'
不过,痕迹并没有真正给我更多信息…… 但这可能与它有关。
任何人都暗示这件事?包,代码示例或任何东西? 希望我错过了一些大事;
谢谢。
【问题讨论】:
标签: multithreading xamarin sync background-thread