Android

关注公众号 jb51net

关闭
首页 > 软件编程 > Android > android native Thread类使用

android关于native中Thread类的使用源码解析

作者:开发之奋斗人生

本文介绍了Android Native中Thread的使用,通过main.cpp启动线程,TestThread类依次调用onFirstRef、readyToRun和threadLoop方法,展示线程生命周期及执行流程,感兴趣的朋友跟随小编一起看看吧

简要概述

简单记录android中native关于thread的使用
源码位置:

system\core\libutils\include\utils\Thread.h
system\core\libutils\Threads.cpp
class Thread : virtual public RefBase
Thread继承RefBase,有以下的一些特性
// Invoked after creation of initial strong pointer/reference.
virtual void            onFirstRef();

代码记录

main.cpp

#include <utils/Log.h>
#include <pthread.h>
#include "TestThread.h"
#ifdef LOG_TAG
#undef LOG_TAG
#endif
#define LOG_TAG "hello_test"
using namespace android;
int main(int args,char** argv) {
    ALOGD("main start TestThread");
    // TestThread
    sp<TestThread> testThread = new TestThread;
    testThread->run("TestThread", PRIORITY_URGENT_DISPLAY);
    while(1){
        if(!testThread->isRunning()){
            break;
        }
    }
     ALOGD("main end");
    return 0;
}

Android.bp

cc_binary{
    name:"hello_test",
    srcs:[
        "main.cpp",
        "TestThread.cpp",
    ],
    shared_libs:[
        "liblog",
        "libutils",
    ],
    cflags: [
            "-Wno-error",
            "-Wno-unused-parameter",
        ],
}

TestThread.h

//
// Created by xxx on 25-6-8.
//
#ifndef ANDROID_TESTTHREAD_H
#define ANDROID_TESTTHREAD_H
#include <utils/threads.h>
#include <utils/Log.h>
namespace android {
    class TestThread : public Thread {
        public:
            TestThread();
            virtual void        onFirstRef();
            virtual status_t    readyToRun();
            virtual bool        threadLoop();
            virtual void        requestExit();
        private:
            int cnt = 0;
    };
}
#endif //ANDROID_TESTTHREAD_H

TestThread.cpp

//
// Created by xxx on 25-6-8.
//
#include "TestThread.h"
namespace android{
    TestThread::TestThread():Thread(false) {
        ALOGD("TestThread");
    }
    void TestThread::onFirstRef(){
        ALOGD("onFirstRef");
    }
    status_t  TestThread::readyToRun(){
        ALOGD("readyToRun");
        return OK;
    }
    bool TestThread::threadLoop() {
        cnt++;
        ALOGD("threadLoop cnt = %d",cnt);
        if(cnt >= 20){
           return false;
        }
        return true;
    }
    void  TestThread::requestExit(){
        ALOGD("requestExit");
    }
}

日志打印如下所示

06-14 22:29:28.500  2094  2094 D hello_test: main start TestThread
06-14 22:29:28.500  2094  2094 D hello_test: TestThread
06-14 22:29:28.500  2094  2094 D hello_test: onFirstRef
06-14 22:29:28.501  2094  2096 D hello_test: readyToRun
06-14 22:29:28.502  2094  2096 D hello_test: threadLoop cnt = 1
...
06-14 22:29:28.505  2094  2096 D hello_test: threadLoop cnt = 20
06-14 22:29:28.505  2094  2094 D hello_test: main end

函数执行顺序 TestThread->onFirstRef->readyToRun->threadLoop

到此这篇关于android关于native中Thread类的使用的文章就介绍到这了,更多相关android native Thread类使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文