问题标签 [looper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
51187 浏览

android - 如何在 AsyncTask 中举杯,提示我使用 Looper

我有 AsyncTask 在后台完成的任务。在某些时候,我需要发出一个 Toast 来表示某事已完成。

我试过了,但我失败了,因为 Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

我怎样才能做到这一点?

0 投票
1 回答
440 浏览

iphone - 什么是黑莓相当于 Androids Looper?

Android 有 Looper,iPhone 有 Run Loops。似乎黑莓将有类似的支持来排队和运行线程。

有谁知道有吗?

0 投票
4 回答
100195 浏览

java - 无法在 AsyncTask 中为 ProgressDialog 调用 Looper.prepare() 的线程内创建处理程序

我不明白为什么我会收到这个错误。我正在使用 AsyncTask 在后台运行一些进程。

我有:

当我进入doInBackground()取决于条件时,我:

每当我尝试时downloadSpinnerProgressDialog.show(),我都会收到错误。

有什么想法吗?

0 投票
2 回答
6629 浏览

android - 多次调用 Looper 会导致“向死线程上的处理程序发送消息”

我正在使用带有我自己的 ThreadFactory 的 Executor [固定线程池],它添加了一个 Looper:

我正在运行一个发出网络请求的线程,但如果网络出现故障,我希望向用户显示一条对话框消息。这个过程相当复杂,因为它需要在 UI 线程中发出并显示请求。我可以通过简单地向网络线程添加一个循环并等待从 UI 线程发送消息来等待用户对对话框的响应。这允许我将网络请求封装在一个 while(tryAgain) 线程中。除了第二次调用 Looper.loop() 方法(显示第二个网络错误对话框之后)并且对话框(在 UI 线程中)将消息发送到网络线程的处理程序时,一切都运行良好:

在 AlertDialog 实例中是一个 OnClickListener:

我已经检查过该线程仍然处于活动状态,handler.getLooper().getThread().isAlive()它总是返回 true,但它仍然给我“向死线程上的处理程序发送消息”。消息/处理程序如何决定线程已死?它不应该依赖 .isAlive() 方法吗?最后,我试图避免将线程管理构建复制到 Android 操作系统中:-)

0 投票
4 回答
8806 浏览

android - 如何在 Android 上更好地对 Looper 和 Handler 代码进行单元测试?

我使用 android.os.Handler 类在后台执行任务。在对这些进行单元测试时,我调用Looper.loop()以使测试线程等待后台任务线程执行其操作。后来,我调用Looper.myLooper().quit()(也在测试线程中),让测试线程退出loop并恢复测试逻辑。

在我想编写不止一种测试方法之前,一切都很好。

问题是 Looper 似乎并没有被设计为允许在同一个线程上退出和重新启动,所以我被迫在一个测试方法中完成所有测试。

我查看了 Looper 的源代码,但找不到解决方法。

还有其他方法可以测试我的 Hander/Looper 代码吗?或者也许是一些更适合测试的方式来编写我的后台任务类?

0 投票
4 回答
9818 浏览

android - Android:每个线程只能创建一个 Looper

我在使用 Android Looper 时遇到问题。我有一个扩展了 AsynTask 的类。在 doInBackground() 方法中,我有 Looper.prepare() 和下面的一些代码。

它第一次运行良好,但之后它给出了一个异常“每个线程只能创建一个 Looper”。

似乎有一些使用 Looper.quit() 的解决方案,但我无法实现它。

任何帮助将不胜感激。

0 投票
2 回答
5765 浏览

android - CountDownTimer:“无法在未调用 Looper.prepare() 的线程内创建处理程序”

我知道之前有人问过“无法在未调用 Looper.prepare() 的线程内创建处理程序”的一般问题,但我很难理解它在这种情况下如何应用。

我正在尝试在非 UI 线程中构造一个新的 CountDownTimer,我猜这是导致此错误的原因,但我真的不明白为什么需要在主线程中使用计时器。从我所看到的来看,它看起来有一个回调处理程序,需要在一个具有循环器的线程中运行,而非 UI 线程默认情况下没有该循环器。看来我的选择是:1)让这个非 UI 线程有一个 Looper 或 2)在我的 UI 线程上做一些奇怪的方法来构造这个计时器,这对我来说都是愚蠢的。有人可以帮我理解其中的含义吗?

另外,有没有人知道任何有用的链接可以阐明 Looper 和 MessageQueue?我没有很好地掌握它们,我确信我已经证明了这一点。谢谢!

0 投票
1 回答
1239 浏览

java - Android:looper/handler vs. Java Observer?

这些不是竞争对手吗?我认为他们不是,但看不到。

在需要了解服务何时有新 xyz 的 Activity 的上下文中怎么样?

谢谢!

0 投票
2 回答
50528 浏览

android - AsyncTask 和 Looper.prepare() 错误

我有以下代码

这似乎在一些测试设备上运行良好,但我看到开发控制台上出现了很多错误。我似乎无法弄清楚为什么以及在哪里放置这个 Looper.prepare()。需要吗?

根据要求 MyLocation.java

0 投票
2 回答
9893 浏览

android - Android:使用处理程序和 postDelayed() 的问题

我正在尝试使用 Handler 在一段时间内执行一些代码。

这在我的两个课程中效果很好,但我遇到了这个问题:

我的一个类扩展了 Activity,并启动了一个线程(实现了 Runnable)。

在我的 run() 方法中,我有,就像在我的其他类中一样:

该程序似乎抱怨:

我不明白为什么它会发布,有人可以帮助我吗?

编辑:添加我的部分代码:

如果计时器达到 30 秒:

非常感谢,

杰里