我有一個應用程序,用戶可以在其中啓動刷新,並且我想要正確構建事情以處理應用程序退出,電話,主頁按鈕等事件。如果用戶點擊現在在進程中間的主頁按鈕,當他們重新打開應用程序時,它繼續前進。我不確定我想要這個。我希望home按鈕殺死這個進程,讓他們在重新打開時重新開始。什麼是最好的方式來阻止你在做什麼這樣說(我明白我需要使用didenterbackground和反向)。這個過程應該在後臺線程,所以我可以NSThread取消?我已經閱讀了關於定期檢查一個標誌的信息,但是一旦檢測到狀況,我該如何停止?它讓我很好奇,而且我確信它很簡單,但最好的辦法是簡單地停止執行某些東西。當應用程序退出時停止執行進程
0
A
回答
1
從蘋果公司的Thread Programming Guide(線程管理 - >終止線程):
雖然可可,POSIX,和多服務提供了直接殺死線程的例程,使用這些例程的強烈反對。殺死一個線程可以防止線程自行清理。 線程分配的內存可能會泄漏,線程當前正在使用的任何其他資源可能無法正確清理,從而在以後產生潛在問題。
如果您預計需要在操作過程中終止線程,則應該從一開始就設計線程以響應取消或退出消息。對於長時間運行的操作,這可能意味着要定期停止工作並檢查是否收到了這樣的消息。如果消息確實要求線程退出,線程將有機會執行任何需要的清理並正常退出;否則,它可能會重新開始工作並處理下一塊數據。
,它也有示例代碼如何做到這一點:
- (void)threadMainRoutine
{
BOOL moreWorkToDo = YES;
BOOL exitNow = NO;
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
// Add the exitNow BOOL to the thread dictionary.
NSMutableDictionary* threadDict = [[NSThread currentThread] threadDictionary];
[threadDict setValue:[NSNumber numberWithBool:exitNow] forKey:@"ThreadShouldExitNow"];
// Install an input source.
[self myInstallCustomInputSource];
while (moreWorkToDo && !exitNow)
{
// Do one chunk of a larger body of work here.
// Change the value of the moreWorkToDo Boolean when done.
// Run the run loop but timeout immediately if the input source isn't waiting to fire.
[runLoop runUntilDate:[NSDate date]];
// Check to see if an input source handler changed the exitNow value.
exitNow = [[threadDict valueForKey:@"ThreadShouldExitNow"] boolValue];
}
}
0
創建NSOperationQueue
。對於所有長時間運行的任務,請創建NSOperation
對象,將它們放在NSOperationQueue
上。您可以使用應用代理的applicationWillResignActive
方法或UIApplicationWillResignActiveNotification
通知來檢測應用何時進入後臺。
當您檢測到狀態轉換時,只需調用您的隊列的cancelAllOperations
方法即可。如果您希望暫停它,那麼隊列上還有一個suspended
屬性。 (你可以稍後恢復。)
NSOperationQueue是絕妙的技術。比GCD高得多。學習它,愛它!
相關問題
- 1. 當ruby退出時停止FSSM進程
- 2. 當我退出應用程序時Android服務停止
- 3. 應用程序停止運行時退出虛擬機
- 4. 停止應用程序,而退出應用程序
- 5. 當if/else執行時應用程序停止
- 6. 當退出Windows 8.1時執行代碼應用程序
- 7. SeekBar不更新和Toast.makeTake不停止當退出應用程序
- 8. 執行時出現「不幸的是,應用程序已停止」
- 9. 退出應用程序時,一個進程正在進行
- 10. 停止執行ASP.NET應用程序
- 11. 如何停止執行應用程序
- 12. 退出時終止應用程序
- 13. 每當我按下後退按鈕時,應用程序停止
- 14. 如何在用戶退出應用程序時停止音樂
- 15. 退出應用程序時,當按下
- 16. 當應用程序調用SQLiteOpenHelper時,Android應用程序停止
- 17. 如何在Flask應用程序退出時停止Gunicorn
- 18. 應用程序退出時停止監視器服務
- 19. 退出時應用程序意外停止
- 20. Android Phonegap App - 退出時關閉並停止應用程序
- 21. MediaPlayer在應用程序退出時不會停止
- 22. 使用退出時停止過程?
- 23. 停止執行worklight程序
- 24. Angularjs停止程序執行
- 25. 當應用程序終止時NSThread退出
- 26. 當應用程序意外退出時防止數據損壞
- 27. 當父進程停止時停止子進程
- 28. Trace32程序停止時執行腳本
- 29. 如何退出/暫停/終止/終止/停止MSBuild進程?
- 30. 當活動開始時停止應用程序進入前臺
非常感謝回覆。我曾在其他地方看過這篇文章,但它讓我感到困惑,我想知道我是否不能做類似的事情。它肯定好像我應該避免取消線程並使用bool標誌定期檢查機制,但是如果我有一個檢查,並且我確定該操作需要停止,返回會停止一些事情,但是這會如何影響線程本身?作爲一個普遍的問題,如果沒有任何東西在運行,或者它到達代碼的最後,線程是否會關閉? – skinsfan00atg