我有一个应用程序,要求用户登录时下载大量数据。我想将其下载部分移至后台线程,以便用户无需等待下载完成即可浏览该应用程序。我尝试了以下方法,但是其中一些方法仍会锁定应用程序,因此用户无法单击任何内容,
dispatch_async(dispatch_get_main_queue(), ^{
});
也尝试过
[self performSelectorInBackground:@selector(loadDataThatToBeFetchedInThread:)
withObject:objectArrayThatNeedToFetchData];
如果我在 Activity 之间移动,这似乎只是停止了。曾尝试将其移动到AppDelegate方法,但是当我尝试保存到SQlite DB时出现一些错误。难道我做错了什么?有人可以帮忙吗?
提前致谢
最佳答案
好吧,dispatch_get_main_queue()
将为您提供主线程,因此可能不是您想要的。
相反,您应该使用以下方法获取后台队列:
dispatch_async (dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ ... });
然后,通常是发出一些通知,甚至直接回调主线程以(在UI中)报告成功:
dispatch_async (dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// Do the download...
// Download finishes...
dispatch_async(dispatch_get_main_queue(), ^{
// Call a UI-updating method, or similar
});
});