Android中, 使用ALoop,AHandler, AMessage的c++例子
时间: 2024-03-24 14:35:40 浏览: 141
以下是一个使用 ALoop、AHandler 和 AMessage 的 C++ 代码示例:
```c++
#include <android/looper.h>
#include <android/native_activity.h>
#include <android/log.h>
#define APP_NAME "ALoopExample"
enum {
MSG_HELLO = 1,
MSG_BYE,
};
class ALooperExample {
public:
ALooperExample(ANativeActivity* activity) : m_activity(activity) {
// 创建一个 ALooper 对象,并且运行在当前线程中
m_looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);
// 创建一个 AHandler 对象,并且关联到当前线程的 ALooper 对象中
m_handler = new AHandler(m_looper, this);
}
~ALooperExample() {
delete m_handler;
}
void run() {
// 发送一个 MSG_HELLO 消息
m_handler->sendMessage(m_handler->obtainMessage(MSG_HELLO));
// 开始循环处理消息
ALooper_pollAll(-1, NULL, NULL, NULL);
}
void handleMessage(const AMessage& msg) {
switch (msg.what()) {
case MSG_HELLO:
__android_log_write(ANDROID_LOG_INFO, APP_NAME, "Hello");
// 发送一个 MSG_BYE 消息
m_handler->sendMessage(m_handler->obtainMessage(MSG_BYE));
break;
case MSG_BYE:
__android_log_write(ANDROID_LOG_INFO, APP_NAME, "Bye");
// 结束消息循环
ALooper_wake(m_looper);
break;
default:
break;
}
}
private:
ANativeActivity* m_activity;
ALooper* m_looper;
AHandler* m_handler;
};
void android_main(ANativeActivity* activity) {
ALooperExample example(activity);
example.run();
}
```
在这个示例代码中,我们首先创建了一个 `ALooperExample` 类,它包含了一个 `ALooper` 对象、一个 `AHandler` 对象和一个消息处理函数 `handleMessage`。在 `ALooperExample` 的构造函数中,我们创建了一个 `ALooper` 对象,并且将其准备为当前线程的消息循环。然后,我们创建了一个 `AHandler` 对象,并且将其关联到 `ALooper` 对象中。在 `run` 函数中,我们发送了一个 `MSG_HELLO` 消息,然后开始循环处理消息,直到收到 `MSG_BYE` 消息为止。在 `handleMessage` 函数中,我们根据不同的消息类型进行不同的处理,然后再次发送一个消息或者结束消息循环。
在 `android_main` 函数中,我们创建了一个 `ALooperExample` 对象,并且调用了它的 `run` 函数。这样,我们就创建了一个包含消息循环的 Android 应用程序。
阅读全文