gpt4 book ai didi

Android:退出 Looper?

转载 作者:可可西里 更新时间:2023-11-01 19:04:57 24 4
gpt4 key购买 nike

我有一个线程,用于定期更新 Activity 中的数据。我创建了线程并启动了一个循环程序,以便将处理程序与 postDelay() 一起使用。在我的 Activity 的 onDestroy() 中,我在我的处理程序上调用 removeCallbacks()。

然后我应该调用 handler.getLooper().quit() 吗?还是不用担心,让操作系统来处理?或者它会一直运行下去,消耗 CPU 周期吗?

最佳答案

根据Android Documentation你应该调用 quit()。

当您调用 Looper.loop() 时,会启动一个 while 循环。调用 Looper.quit() 会导致循环终止。垃圾收集器无法在循环执行时收集您的对象。

以下是 Looper.java 的相关部分:

public static final void loop() {
Looper me = myLooper();
MessageQueue queue = me.mQueue;
while (true) {
Message msg = queue.next(); // might block
//if (!me.mRun) {
// break;
//}
if (msg != null) {
if (msg.target == null) {
// No target is a magic identifier for the quit message.
return;
}
if (me.mLogging!= null) me.mLogging.println(
">>>>> Dispatching to " + msg.target + " "
+ msg.callback + ": " + msg.what
);
msg.target.dispatchMessage(msg);
if (me.mLogging!= null) me.mLogging.println(
"<<<<< Finished to " + msg.target + " "
+ msg.callback);
msg.recycle();
}
}
}

public void quit() {
Message msg = Message.obtain();
// NOTE: By enqueueing directly into the message queue, the
// message is left with a null target. This is how we know it is
// a quit message.
mQueue.enqueueMessage(msg, 0);
}

关于Android:退出 Looper?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2793216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com