android中影象緩衝區的分配是由單例類graphicbufferallocator實現的。
[frameworks/native/include/ui/graphicbufferallocator.h]
#ifndef android_buffer_allocator_h
#define android_buffer_allocator_h
#include
#include
#include
#include
#include
#include
#include
#include
namespace android ;
//獲取單例例項。
static
inline graphicbufferallocator& get()
status_t alloc(uint32_t w, uint32_t h, pixelformat format, uint32_t usage,
buffer_handle_t* handle, uint32_t* stride);
status_t free(buffer_handle_t handle);
void dump(string8& res) const;
static
void dumptosystemlog();
private:
struct alloc_rec_t ;
//靜態變數
static mutex slock;
static keyedvectorsalloclist;
//父類宣告為友元類,原因是?不清楚。
friend
class singleton;
//構造和析構函式均為private。
graphicbufferallocator();
~graphicbufferallocator();
alloc_device_t *mallocdev;
};}; // namespace android
#endif // android_buffer_allocator_h
具體的實現思路是:
1. 在建構函式中開啟gralloc模組,在析構函式中關閉開啟的gralloc檔案描述符;
graphicbufferallocator::graphicbufferallocator()
: mallocdev(0)
}graphicbufferallocator::~graphicbufferallocator()
alloc()函式執行成功後,會插入到graphicbufferallocator類的靜態變數salloclist中,每次操作需要加鎖slock。在free時,會刪除key為handle的key-value對。
[frameworks/native/libs/ui/graphicbufferallocator.cpp]
mutex graphicbufferallocator::slock;
keyedvectorgraphicbufferallocator::salloclist;
status_t graphicbufferallocator::alloc(uint32_t width, uint32_t height,
pixelformat format, uint32_t usage, buffer_handle_t* handle,
uint32_t* stride)
return err;
}status_t graphicbufferallocator::free(buffer_handle_t handle)
return err;
}
android開發中的
線性布局 linear layout 相對布局 relative layout 布局 table layout 網格檢視 grid view 標籤布局 tab layout 列表檢視 list view 絕對布局 absolutelayout 1.實現tab的效果必須使用tabhost控制項作為ta...
Android中的Message Pool實現
為了避免物件頻繁建立銷毀帶來的開銷,可以採用乙個pool來維護這些物件,物件使用後可重新放到pool中被重新使用。message是乙個被頻繁使用的物件,因此message提供了乙個message pool。下面是message pool的實現。obtain方法用來從pool中獲取乙個message物...
Android中的廣播
android中的廣播。有發射廣播,必須要有收音機才能接到,並且調對臺才能得到對應的臺。1.電台發射廣播 使用intent,intent intent new intent 需要廣播的臺的名字 context。sendbroadcast intent 也就是先 生成一下你需要廣播的臺,然後用send...