问题标签 [android-handlerthread]

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 投票
1 回答
547 浏览

android - How to stop a blocked handler thread?

I have bind an activity to a remote service through aidl interface. Various other activities are also bound to it. After some point of time, calls are getting blocked. When I open that particular activity it starts a handlerthread and it is calling some remote methods through aidl interface. But they are blocked so thread is also getting blocked. Inside onDestroy() method, I am trying to do handlerthread.quit(), but thread is not stopping. So every time I am starting that activity threads are started but not getting stopped on destroying activity.

My question is how can I stop the handlerthread which is in blocked state?

0 投票
0 回答
688 浏览

java - Android HandlerThread:处理程序帖子有时无法运行 Runnable

我正在HandlerThreadAndroid 上进行试验,但我似乎无法解释一个奇怪的行为。这是我用来通过这个独特线程简单地记录消息的类。

这是我对这个类的用法:

现在来看看奇怪的行为:在运行了这么多次之后,有时日志会停在大约 7xx 或 8xx (不是特定值),并且大多数时候它会变为 999,但似乎所有帖子都没有跑起来。为什么是这样?谁能给我一个解释?

精度:我使用 Genymotion 模拟器进行这些测试。

更新:真实设备上的相同行为(Moto X 2012)

感谢您提供任何线索。

已解决: 发生这种情况的原因很简单,因为 android 的 logcat 无法处理这么多条目,所以它只是跳过显示它们。Handler 的 runnable 实际上每次都会运行,并且可以通过以下方式轻松检查:

只需检查一下hitsCounter,您就会发现它实际上等于预期的 1000。

0 投票
2 回答
1194 浏览

android - HandlerThread 阻止 UI android

我正在修改适用于 Android 的 Google Camera2 API 示例,可在此处找到:https ://github.com/googlesamples/android-Camera2Basic

我正在将捕获的图像上传到 Cloudinary,显然需要在后台线程中这样做,这样 UI 就不会被阻塞。

然而,我遇到的问题是,当上传图像时,UI 实际上被阻止了,尽管据我所知,它不应该是,因为处理程序是使用 Looper 从后台线程创建的,如下所示:

ImageSaver 类,负责将捕获的图像写入磁盘,如下所示:

ImageSaver 在此处添加到 Handler 中:

我将不胜感激任何帮助或建议,为我指明正确的方向。

0 投票
2 回答
900 浏览

android - BroadcastReceiver中的HandlerThread

是否可以在BroadcastReceiveronReceive方法中使用HandlerThread进一步在主 UI 线程上启动服务?

我的目标是在onReceive方法中使用HandlerThread,以便服务在单独的线程中启动。

但不知道如何实现。

有什么提示吗?

谢谢

编辑:服务类

我认为我没有正确使用服务。请帮忙。

EDIT2:Logcat

0 投票
2 回答
1716 浏览

android - HandlerThread 与 IntentService

我想请人解释一下,HandlerThread和IntentService之间的主要区别是什么,主要的用例场景是什么?

我知道HandlerThread包含一个 Looper,它管理由 Handler 提供的 messageQueue。据我了解,您可以为 HandlerThread 推送任务并且它将执行。用于非 UI 相关的长时间运行的操作非常有用,您可以通过runOnUiThread()将结果推送回 UI 。

相比之下,IntentService适合长时间运行的非 UI 相关操作,可以按顺序执行任务,当它完成调用 selfStop() 以关闭自己完成的作业时。如果 IntentService 正在处理一项任务,当一个新请求到达时,它将添加到队列中并处理第二个,当它完成第一个时。

从我的角度来看,他们以同样的方式做着同样的工作。假设我有一个应用程序,用户点击一个按钮,我开始下载一个文件。如果用户点击多次,一个新任务会排队,只有在第一个任务完成后才会启动第二个任务。我应该使用什么?IntentService 还是 HandlerThread?

0 投票
5 回答
815 浏览

android - 有没有办法几乎瞬间从后台线程调用 UI 线程中的方法?

这不是关于能够在主/UI 线程中调用方法而是能够立即这样做的问题。

据我所知,由于 UI 响应要求,通常不允许您直接与 UI 线程交互。那么有一个系统来排队你对主线程的请求是有意义的,我们确实有这个系统,带有循环器、处理程序等。

这是我所做的:我在后台线程中执行了一些任务,并且我想在满足条件后立即关闭主线程(我为它创建了一个侦听器)并且我使用响应处理程序来发布它..类似于这个:

如果我没有通知 PhotoGallery已经发送了足够多的请求,它将继续发送越来越多的请求,并且应用程序变得无响应。

此外,请求排队并稍后执行,导致请求过多。

因此,我的问题是:

有没有办法几乎瞬间从后台线程调用 UI 线程中的方法/通知?

0 投票
3 回答
1360 浏览

android - 处理程序按顺序执行的事项

我从一个解释 Android 中的处理程序(线程事物)的网站上截取了这个片段。

从第二次执行时输出的任务来看Handler,即

似乎文章的作者非常确定第二个Handler将最后执行。

我的问题是,第二个Handler是否会在第一个Handler完成工作后最后执行。虽然,当我多次运行它时,是的,它是最后执行的。在我看来,由于Handler是在后台完成的,所以Thread我们不应该知道(甚至预测)这两个任务中的哪一个Handler将首先执行。我需要一个解释,提前谢谢你。

0 投票
1 回答
589 浏览

android - 为什么后台线程会产生自己的 Handler & Looper

为什么后台线程会产生自己的 Handler & Looper 只是为了修改 UI 的组件。我知道简单来说:

  • Looper:在消息队列中循环执行任务

  • 处理程序:将任务发布到队列

看看我从互联网上的文章中获取的这个片段

要么是我完全误解了代码,要么是 Android 缺乏线程基础。所以我很抱歉。

后台线程基本上重复自己(两次)。主要思想是通过后台线程操作 UI 组件。

看看这个:

为什么后台线程会创建自己的处理程序,如果它是操作 UI 组件的问题,为什么不只是引用 UI 线程处理程序并通过处理程序发布可运行。

which is creating its own looper (background thread's looper), which indicates that the background thread creating its own Message Queue. Shouldn't it be supposed to just play around with the message queue of main thread and not background thread.

Thanks in advance.

0 投票
4 回答
409 浏览

android - 为什么设置了 HandlerThread 的 looper 的 Handler 可以与 UI 对象交互?

为什么这段代码有效?

我从某个地方读到唯一可以与 UI 对象通信的线程是 UI 线程,或者我错过了一些东西

我有一些研究,但还没有找到答案,请帮助,非常感谢你们。

这是我从日志中得到的

10-13 18:47:42.888 23841-23841/th.co.me.sampleapp I/onCreate: Thread[main,5,main] 10-13 18:47:42.891 23841-24041/th.co.me.sampleapp I/Thread:: Thread[myHandlerThread,5,main]

更新 1

我从@nshmura 尝试了这段代码,但发生了错误,现在让我很困惑

android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能接触其视图。

0 投票
1 回答
408 浏览

android - Android - 何时使用 HandlerThread/Thread/ThreadPool/IntentService?

我知道如何使用 HandlerThread/Thread/ThreadPool/IntentService 中的每一个,但我真的不知道我需要选择哪一个来用于后台任务。

有人有一些提示什么时候使用每个?