介紹
在日常的ios開發中,遇到卡頓也是在所難免,一般卡頓是由於主線程處理耗時長的操作而造成執行緒一直在阻塞,那麼我們可以去建立子執行緒,把耗時操作放在子執行緒去做,這樣是完全沒問題。 這樣就會有乙個問題,子執行緒處理完操作之後就會被銷毀,想再處理其他事情,必須再開啟新的子執行緒。如果想要乙個子執行緒去持續處理事情,那麼就需要這個執行緒一直存活在後台,在需要的時候隨時可以喚醒。
下面提供兩種執行緒保活的方案就可以做到保活,在有任務的時候喚醒來做事情, 執行緒沒任務時會進入休眠狀態。
方案一//標頭檔案
typedef void (^yzcpermenantthreadtask)(void);
@inte***ce yzcpermenantthread : nsobject
- (void)executetask:(yzcpermenantthreadtask)task;
- (void)canceltask;
@end
//**********.m檔案***************=
#import "yzcpermenantthread.h"
#pragma mark - yzcthread
@inte***ce yzcthread : nsthread
@end
@implementation yzcthread
-(void)dealloc ;
// 建立source
cfrunloopsourceref source = cfrunloopsourcecreate(kcfallocatordefault, 0, &context);
// 往runloop中新增source
cfrunloopaddsource(cfrunloopgetcurrent(), source, kcfrunloopdefaultmode);
// 銷毀source
cfrelease(source);
// 啟動
cfrunloopruninmode(kcfrunloopdefaultmode, 1.0e10, false);
nslog(@"end----");
[self.innerthread start];
return self;
呼叫外面呼叫就相對比較簡單,因為上面已經封裝好了
#import "viewcontroller.h"
#import "yzcpermenantthread.h"
@inte***ce viewcontroller ()
@property (nonatomic, strong) yzcpermenantthread *thread;
@end
@implementation viewcontroller
- (void)viewdidload {
[super viewdidload];
self.thread = [[yzcpermenantthread alloc] init];
- (void)touchesbegan:(nsset *)touches withevent:(uievent *)event {
[self.thread executetask:^{
nslog(@"執行了任務:%@",[nsthread currentthread]);
iOS 後台保活
關於ios為voip應用提供的特殊許可權和實現方法,我的描述如下.我盡可能的涉及到voip實現的各種細節,這樣你能對這個運作機制有乙個更好的理解,我覺得這遠比單單貼幾行 有意義.因為乙個開發者在實際實現過程中遇到的千難險阻很少會體現在最終 上,就如你永遠不知道台上的角兒在台下的挫折.你永遠也沒有辦法...
如何實現執行緒保活
有兩種方案 第一種 提公升優先順序 降低程序被殺死的概率 執行緒的優先順序 a.前台程序 b.可見程序 c.服務程序 d.後台程序 e.空程序 1.利用activity 提公升許可權 監聽手機鎖屏事件 在螢幕鎖屏的時候啟動乙個 1畫素的 activity,在使用者解鎖時將 activity 銷毀,注...
RunLoop之執行緒保活
參考文獻 在ios專案中,有時會有一些花費時間較長的操作阻塞主線程,我們通常為了防止介面卡頓,將其放入子執行緒中執行。根據執行緒知識,如果子執行緒執行完分配的任務後,就會自動銷毀。比如我們現在定義乙個執行緒,改寫它的dealloc方法,觀察它什麼時候銷毀 implementation taythre...