浅析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 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-12-22 23:59:51

浅析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 entryFu

浅析Android中的visibility属性_Android

Android开发中,大部分控件都有visibility这个属性,其属性有3个分别为"visible "."invisible"."gone".主要用来设置控制控件的显示和隐藏.1) 可见(visible)XML文件:android:visibility="visible"Java代码:view.setVisibility(View.VISIBLE); 2) 不可见(invisible)XML文件:android:visibi

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中Intent习惯用法_Android

Android中的Intent是一个非常重要的类,如果对Intent不是特别了解,可以参见<详解Android中Intent的使用方法>.如果对Intent Filter不是特别了解,可以参见<详解Android中Intent对象与Intent Filter过滤匹配过程>. 本文着重讲一下Android中一些常见的Intent的习惯用法,比如如何通过Intent发送短信.发送邮件.启动摄像机拍照录视频.设置闹铃.打开WIFI设置界面等等. 限于篇幅,本文分为上下两篇,这是上篇. 发

详解Android中处理崩溃异常_Android

大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了崩溃现象,开发者应该及时获取在该设备上导致崩溃的信息,这对于下一个版本的bug修复帮助极大,所以今天就来介绍一下如何在程序崩溃的情况下收集相关的设备参数信息和具体的异常信息,并发送这些信息到服务器供开发者分析和调试程序. 我们先建立一个crash项目,项目结构如图: 在MainActivity.ja

从源码剖析Android中的Intent组件_Android

我们知道,Intent主要用来激活安卓几大组件,那么它具体是怎样来激活的?激活时是否可以携带java对象?为何要将对象序列化后才能传递? 一.Intent官网解释Intent可以被startActivity用来加载Activity,也可以被broadcastIntent发送给指定的BroadReceiver组件, 或者被startService.bingService来与后台service通信. Intent最主要作用就是加载Activity,好比Activity之间的胶水. Intent数据结

Android中Handler消息传递机制_Android

Handler 是用来干什么的? 1)执行计划任务,可以在预定的时间执行某些任务,可以模拟定时器 2)线程间通信.在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息.当你创建子线程时,你可以在你的子线程中拿到父线程中创建的Handler 对象,就可以通过该对象向父线程的消息队列发送消息了.由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面. 出于性能优化考虑,Android的UI操作并不是线程安全的,这意味着如果有多个线程并发