淺析android中的線程封裝
簡單寫一下android 對線程 的c++封裝~~~其實API已經(jīng)寫得很清楚了~~
封裝 的文件 :/frameworks/base/include/utils/threads.h
這里不討論具體實現(xiàn),具體實現(xiàn)是和系統(tǒng) 相關(guān)聯(lián)的~~首先Anroid提供了幾個與直接創(chuàng)建線程的函數(shù):
inline bool createThread(thread_func_t f, void *a)
inline bool createThreadEtc(thread_func_t entryFunction,
void *userData,
const char* threadName = "android:unnamed_thread",
int32_t threadPriority = PRIORITY_DEFAULT,
size_t threadStackSize = 0,
thread_id_t *threadId = 0)
inline thread_id_t getThreadId()
下面看看Android的mutex,基本和posix的mutex很像,唯一增加了一個Mutex::Autolock,這個自動鎖用得是比較多的,在作用域里加鎖,脫離作用域就會自動解鎖。
class Autolock {
public:
inline Autolock(Mutex& mutex) : mpMutex(&mutex) { mutex.lock(); }
inline Autolock(Mutex* mutex) : mpMutex(mutex) { mutex->lock(); }
inline ~Autolock() { mpMutex->unlock(); }
private:
Mutex* mpMutex;
};
再看看Andorid的Condition,用法基本和posix差不多,因為本身是條件變量所以只有一個mutex參數(shù)~~
最后看看android的thread類,在實際使用的過程中都是繼承這個thread類來創(chuàng)建自己的thread類,并定義線程的執(zhí)行內(nèi)容,下面主要圍繞創(chuàng)建自己的線程類需要實現(xiàn)的幾個函數(shù)說說:
class Thread : virtual public RefBase
首先它繼承自RefBase類,一般在使用的時候要實現(xiàn)onFirstRef()這個父類函數(shù),一般經(jīng)典 的用法是在里面運行Thread的run函數(shù),這樣在創(chuàng)建thread的實例 的時候就開始運行這個線程了。當(dāng)然也可以不在這里執(zhí)行run()函數(shù),在其他地方執(zhí)行run()函數(shù)啟動這個線程。
virtual status_t run( const char* name = 0,
int32_t priority = PRIORITY_DEFAULT,
size_t stack = 0);
創(chuàng)建一個thread實例的時候,線程并沒有運行,只有在執(zhí)行run()函數(shù)的時候,線程才開始真正的開始運行。
virtual status_t readyToRun();
這個函數(shù)定義thread執(zhí)行前的初始化工作
virtual bool threadLoop() = 0;
這個函數(shù)是每個線程類都要實現(xiàn)的,在這里定義thread的執(zhí)行內(nèi)容,這個函數(shù)如果返回true,則函數(shù)會不停地執(zhí)行threadloop中的內(nèi)容,如果這個函數(shù)返回false,則threadloop中的內(nèi)容僅僅執(zhí)行一次線程就會退出。
相關(guān)文章
Android?RecyclerView曝光采集的實現(xiàn)方法
這篇文章主要為大家詳細介紹了Android?RecyclerView曝光采集的實現(xiàn)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
Android 自定義View結(jié)合自定義TabLayout實現(xiàn)頂部標(biāo)簽滑動效果
小編最近在做app的項目,需要用到tablayout實現(xiàn)頂部的滑動效果,文中代碼用到了自定義item,代碼也很簡單,感興趣的朋友跟隨腳本之家小編一起看看吧2018-07-07
android計算器實現(xiàn)兩位數(shù)的加減乘除
這篇文章主要為大家詳細介紹了android計算器實現(xiàn)兩位數(shù)的加減乘除,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03
Android 百度地圖定位實現(xiàn)仿釘釘簽到打卡功能的完整代碼
這篇文章主要介紹了Android 百度地圖定位實現(xiàn)仿釘釘簽到打卡功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04

