我对如何以及何时使用感到困惑beginBackgroundTaskWithExpirationHandler.
Apple在他们的示例中显示在applicationDidEnterBackground委托中使用它,以便有更多时间来完成一些重要任务,通常是网络事务.
在查看我的应用程序时,似乎我的大多数网络内容都很重要,当一个人启动时,如果用户按下主页按钮,我想完成它.
因此,beginBackgroundTaskWithExpirationHandler为了安全起见,包装每个网络事务(并且我不是在谈论下载大量数据,大多数是短xml)是接受/良好做法 吗?
network-programming objective-c multitasking ios background-thread
我必须在我的应用程序中执行一系列下载和数据库写入操作.我正在使用NSOperation和NSOperationQueue相同的.
这是应用场景:
如上所述,我NSOperation为每项任务定义了一个.在第一种情况下(Task1),我向服务器发送请求以获取所有邮政编码.将在该会议中的代表NSOperation接收数据.然后将该数据写入数据库.数据库操作在不同的类中定义.从NSOperation类I开始调用数据库类中定义的write函数.
我的问题是数据库写操作是在主线程还是后台线程中发生的?正如我在其中调用它一样, NSOperation我期望它在不同的线程(Not MainThread)中运行NSOperation.有人可以在处理NSOperation和解释这个场景时解释NSOperationQueue.
我试图弄清楚我收到的iPhone应用程序的崩溃日志.我能看到的主要内容是:
Application Specific Information:
MyMoodTrack[144] has active assertions beyond permitted time:
{(
<SBProcessAssertion: 0x73c6480> identifier: Suspending process: MyMoodTrack[144] permittedBackgroundDuration: 10.000000 reason: suspend owner pid:26 preventSuspend preventThrottleDownCPU preventThrottleDownUI
)}
Run Code Online (Sandbox Code Playgroud)
这告诉我,好像这个过程已被杀死,因为启动时间太长.这听起来不错吗?它只发生在用户没有互联网连接的情况下,尽管我还没有能够在我的最后重复这一点.下面附有完整的崩溃日志,但我无法正确地进行符号化.
Incident Identifier: 368C9C91-43FF-4FB5-AD50-B75D944AFB1B
CrashReporter Key: 18c5260f4e6af9802ba3eb0d838ed5b6dc7b932a
Hardware Model: iPod3,1
Process: MyMoodTrack [144]
Path: /var/mobile/Applications/E39675AA-1E1C-4D39-98DB-A81A1F944DE6/MyMoodTrack.app/MyMoodTrack
Identifier: MyMoodTrack
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2010-09-05 22:53:42.306 +0100
OS Version: iPhone OS 4.0.2 (8A400)
Report Version: 104
Exception Type: 00000020
Exception Codes: 0x8badf00d
Highlighted Thread: 0
Application Specific …Run Code Online (Sandbox Code Playgroud)