如何打印出Looper中Message处理的log


      
Telephony中大量的消息处理与传递都是靠handlerLooper来完成,若是有遇到消息处理(例如某一个message处理太久)导致问题,可以在适当位置按照如下方式打开Looper处理message的相关log查看。

 

[SOLUTION]

Looper中提供了setMessageLogging(Printer printer)接口可以用来打开Looper.loop()中相关log信息。

例如:

先import android.util.LogPrinter;

然后可以在拨打电话时,加入以下代码,打开log

Looper.myLooper().setMessageLogging(new LogPriner(Log.DEBUG,LOG_TAG));

在电话挂断后,加入以下代码关闭log

Looper.myLooper().setMessageLogging(null);

这样就可以打开整个电话流程中,Phone主线程的Looper对于Message的处理情况。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用 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 应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值