1.ProcessState实例化过程
类图
时序图
<1>.new ProcessState();
<2>.ProcessState::self()->startThreadPool()
2.程序例子
1)RefBase基类和智能指针StrongPointer关系
make()函数用法在StrongPointer.h里.
system/core/libutils/include/utils/StrongPointer.h
class sp {
template <typename T>
template <typename... Args>
sp<T> sp<T>::make(Args&&... args) {
T* t = new T(std::forward<Args>(args)...);
sp<T> result;
result.m_ptr = t;
t->incStrong(t);
return result;
}
};
2).其实RefBase.h里引用了utils/StrongPointer.h,即使用了智能指针,如下所示:
system/core/libutils/include/utils/RefBase.h
#include **
<1>.Android.mk
```Makefile
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := sppointer
LOCAL_SRC_FILES := strong_pointer.cpp
LOCAL_SHARED_LIBRARIES := libcutils libutils
include $(BUILD_EXECUTABLE)
<2>.strong_pointer.cpp
#include
#include
#include
using namespace android;
class Bigclass : public RefBase{
public:
Bigclass(String8 name): mDriverName(name){
printf("Bigclass::mDriverName = %s\n",mDriverName.c_str());
}
String8 getDriverName() {
return mDriverName;
}
private:
String8 mDriverName;
};
int main(){
const char *driver = "/dev/binder";
static sp<Bigclass> bC;
bC = sp<Bigclass>::make(String8(driver));
printf("xxx------> driverName = %s\n",bC->getDriverName().c_str());
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31