浅析android中的线程封装

简单写一下android 对线程 的c++封装~~~其实API已经写得很清楚了~~

封装 的文件 :/frameworks/base/include/utils/threads.h

这里不讨论具体实现,具体实现是和系统 相关联的~~首先Anroid提供了几个与直接创建线程的函数:
复制代码 代码如下:
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参数~~

最后看看android的thread类,在实际使用的过程中都是继承这个thread类来创建自己的thread类,并定义线程的执行内容,下面主要围绕创建自己的线程类需要实现的几个函数说说:

class Thread : virtual public RefBase
首先它继承自RefBase类,一般在使用的时候要实现onFirstRef()这个父类函数,一般经典 的用法是在里面运行Thread的run函数,这样在创建thread的实例 的时候就开始运行这个线程了。当然也可以不在这里执行run()函数,在其他地方执行run()函数启动这个线程。  
复制代码 代码如下:
virtual status_t    run(    const char* name = 0,
                                int32_t priority = PRIORITY_DEFAULT,
                                size_t stack = 0);

创建一个thread实例的时候,线程并没有运行,只有在执行run()函数的时候,线程才开始真正的开始运行。

virtual status_t    readyToRun();
这个函数定义thread执行前的初始化工作

virtual bool        threadLoop() = 0;
这个函数是每个线程类都要实现的,在这里定义thread的执行内容,这个函数如果返回true,则函数会不停地执行threadloop中的内容,如果这个函数返回false,则threadloop中的内容仅仅执行一次线程就会退出。

时间: 2024-10-24 05:26:48

浅析android中的线程封装的相关文章

浅析android中的线程封装_Android

简单写一下android 对线程 的c++封装---其实API已经写得很清楚了-- 封装 的文件 :/frameworks/base/include/utils/threads.h 这里不讨论具体实现,具体实现是和系统 相关联的--首先Anroid提供了几个与直接创建线程的函数: 复制代码 代码如下: inline bool createThread(thread_func_t f, void *a)  inline bool createThreadEtc(thread_func_t entr

Android中的线程池与任务队列

Android中的线程池与任务队列:             在Android手机开发的时候,考虑的资源问题是必须的.当然我们要注重线程的消耗资源的过程,线程在new的时候最消耗内存开销,而在运行的时候远远小于new的时候的内存开销.故我们可以考虑应用线程池与任务队列去解决线程的消耗问题. 实例讲解:    我们在最初加载的时候,可以new一个线程类,单独线程需要之行的操作.代码如下:  1.  DownloadTask.java: package com.threadExecutorServi

浅析Android中常见三种弹框在项目中的应用

一丶概述 弹框在Android项目中经常出现,常见的实现方法有三种:Dialog 弹框,Window弹框,Activity伪弹框.本文就说一说三种弹框的实现及在项目中的运用. 二丶演示图 图一为常见的三种弹框(文末上链接),图二为项目中用到的Activity伪弹框 三丶正文 1.Dialog弹框 先看一篇一篇文章: android 8种对话框(Dialog)使用方法汇总 Dialog是系统自带的弹框,然而常常因为UI不好看而遭嫌弃,常需要自定义 public class MyDialog ext

Android 中不用线程如何实现倒计时

需求: 有多个组件可以开启倒计时,正常情况下默认倒计时时间终了后更新UI,另,用户可以取消指定倒计时. 这里使用CountDownTimer进行倒计时,其中回调函数onFinish是在倒计时终了时回调,onTick是在倒计时开始时回调,用户可以使用CountDownTimer对象的cancel方法取消倒计时. 这样做的好处:不需要使用繁琐的线程去控制倒计时,更方便的进行UI更新. 上代码: MainActivity package test.demo.countdowntest; import

浅析Android中强大的Dialog_Android

Android中经常会使用到Dialog(弹出框效果),而且功能非常强大,可以模拟出N种弹出框效果.如图所示: 下面将通过一个小实例,来像大家展示Android中功能强大的Dialog.代码都写了详细的注释,读者不妨试着手动去敲. 当然,由于时间的关系,还有个别功能没有完成,先有的几个展示效果中也可能有bug,代码也有很多需要优化的地方.望大家热心指出. 下面是代码(有点长哦): 复制代码 代码如下: package com.chaoyang.activity; import java.util

浅析Android中强大的Dialog

Android中经常会使用到Dialog(弹出框效果),而且功能非常强大,可以模拟出N种弹出框效果.如图所示: 下面将通过一个小实例,来像大家展示Android中功能强大的Dialog.代码都写了详细的注释,读者不妨试着手动去敲. 当然,由于时间的关系,还有个别功能没有完成,先有的几个展示效果中也可能有bug,代码也有很多需要优化的地方.望大家热心指出. 下面是代码(有点长哦):复制代码 代码如下:package com.chaoyang.activity; import java.util.A

详解Android中用于线程处理的AsyncTask类的用法及源码_Android

为什么要用AsyncTask我们写App都有一个原则,主线程不能够运行需要占用大量CPU时间片的任务,如大量复杂的浮点运算,较大的磁盘IO操作,网络socket等,这些都会导致我们的主线程对用户的响应变得迟钝,甚至ANR,这些会使应用的用户体验变差,但是有时又的确需要执行这些耗时的任务,那么我们通常可以使用AsyncTask或者new Thread 来处理,这样把任务放入工作线程中执行,不会占用主线程的时间片,所以主线程会及时响应用户的操作,如果使用new Thread来执行任务,那么如果需要中

详解Android中用于线程处理的AsyncTask类的用法及源码

为什么要用AsyncTask 我们写App都有一个原则,主线程不能够运行需要占用大量CPU时间片的任务,如大量复杂的浮点运算,较大的磁盘IO操作,网络socket等,这些都会导致我们的主线程对用户的响应变得迟钝,甚至ANR,这些会使应用的用户体验变差,但是有时又的确需要执行这些耗时的任务,那么我们通常可以使用AsyncTask或者new Thread 来处理,这样把任务放入工作线程中执行,不会占用主线程的时间片,所以主线程会及时响应用户的操作,如果使用new Thread来执行任务,那么如果需要

Android中的线程

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 在 Android 平台中多线程应用很广泛,在 UI 更新.游戏开发和耗时处理(网络通信等)等方面都需要多线程. Android 线程涉及到的技术有: Handler, Message,MessageQueue,Looper,HandlerThread. Normal 0 7.8 磅 0 2 false false false EN