【问题标题】:Does an Android Looper thread use processing power?Android Looper 线程是否使用处理能力?
【发布时间】:2012-02-04 12:32:17
【问题描述】:

这个问题可能也适用于 Java 线程的一般世​​界......

我有一个这样使用的线程(这是在run 方法中):

Looper.prepare();

Handler rHandler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        //ommited...
    }   
};

Looper.loop();

我的问题是线程在等待将事物推送到处理程序时是否正在使用 CPU?还是真的“睡着了”?

有几个这样的线程会使系统陷入困境吗?

【问题讨论】:

    标签: android multithreading looper


    【解决方案1】:

    在底层,Looper 是 Java 层的一个外观,用于本地代码 Looper 对象(用 C++ 编写)。本机代码循环器利用了 Linux 系统调用“epoll”,这是一种为可扩展性而构建的 I/O 事件通知机制(即,您可以拥有大量它们而对性能影响很小——尽管对内存有一些影响)。这意味着当 Looper 挂在 loop() 并且队列上没有消息时,实际上没有执行任何操作,因此它不使用处理能力(只是一点点内存)。当一条消息被投递到它上面的消息队列时,线程将被“唤醒”并处理该消息。

    如果您对代码感兴趣,请参阅:

    AOSP_ROOT/frameworks/native/libs/utils/Looper.cpp 
    AOSP_ROOT/frameworks/base/core/java/android/os/Looper.java
    AOSP_ROOT/frameworks/base/core/java/android/os/MessageQueue.java
    AOSP_ROOT/frameworks/base/core/jni/android_os_MessageQueue.cpp
    AOSP_ROOT/frameworks/base/native/android/looper.cpp
    

    【讨论】:

      【解决方案2】:

      当线程在等待消息时,它还没有准备好运行。未准备好运行的线程不能使用任何 CPU。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-17
        • 1970-01-01
        • 2011-04-22
        • 1970-01-01
        • 2016-10-07
        • 2018-05-20
        • 2012-01-16
        • 1970-01-01
        相关资源
        最近更新 更多