问题标签 [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.
android - 为什么在 Android 中使用 HandlerThread
在 android 中,Handler 可用于发布/处理消息,如果我不使用 HandlerThread(将其 Looper 传递给 Handler),这是否意味着在这种情况下 Handler 使用 MainThread(UI Thread)的 Looper?
如果 Handler 使用 MainThread 的 Looper 会得到什么结果?可能导致 mainThread 阻塞?
java - HandlerThread.getLooper() 无限期阻塞
我正在尝试学习如何使用 HandlerThread 在自己的线程中运行 MediaPlayer。但我在第一步就失败了。我花了 2 天的时间痛苦地尝试理解 Java/Android 中的线程,并且真的需要一些帮助。(我已经阅读了无数的示例和 javadoc 页面,包括 Java 和 Android)并且我感到非常沮丧/愚蠢。
在下面的示例中,getLooper() 无限期地阻塞。我不知道为什么。请有人告诉我如何修改下面的代码来解决这个问题?
此外,关于如何发送导致 MediaPlayer 方法被调用(异步)的消息的示例将非常有价值,可能会为我节省一周的时间。
谢谢
android - 与 HandlerThread 通信的示例
我想从 GUI 线程设置一个 HandlerThread。一段时间后,当在 GUI 上单击按钮时,它会运行 callHello(),然后将消息发送到位于非 GUI 线程上的 HelloLogger 对象,该对象异步记录“Hello World”。我已经尝试了很多东西,有些无限期地阻塞,有些永远不会收到消息等等。下面的代码或多或少与我得到的一样接近,请有人修改它以使其工作?
找到的最佳示例:
- 处理线程测试
- 如何创建一个 Looper 线程,然后立即向它发送消息?
- 使用 Handler 进行异步调用
- HandlerThread vs Executor - 什么时候比另一个更合适?
- HandlerThread 优于其他类似类的最佳使用
- Android 处理线程
- 处理线程示例
- Android:在主线程和工作线程之间传递数据
- Java 同步
- 使用活动线程队列和 Handler 类在线程之间发送消息
- Loopers 和处理程序简介
- developer.android:指定要在线程上运行的代码
至少现在我可以关闭该死的标签
解决方案由 pskink 提供帮助
android - HandlerThread 中的 NullPointerException
这个错误让我困惑了几个小时。我得到NullPointerException。问题是这个错误不一致。当我启动应用程序时会发生这种情况,但只是偶尔。所以我不确定是什么原因造成的。
对于错误日志的冗长问题,我深表歉意,但我找不到另一种提问方式。
错误日志如下:
发生这种情况的代码如下所示:
如果您想知道,错误日志中的第 74 行(更具体地说, thisat com.myproject.android.ImageDownloaderThread.queueImage(ImageDownloaderThread.java:74)
引用.obtainMessage(MESSAGE_DOWNLOAD, pos, 0, url)
了queueImage()
编辑
根据Loop的回答中的建议,调用时mHandler
为空queueImage()
。那么,如何保证在执行任何调用之前mHandler
被初始化?onLooperPrepared()
queueImage()
android - 在后台线程中发出的地理定位请求冻结了主线程
我的应用程序有以下工作流程:主活动有一个按钮,单击后启动第二个活动。在第二个活动中,有一个TextView
显示位于指定地理点的城市。为了找到这个城市,我向我在后台线程中提出的Geocoder提出了一个请求。
我的期望:第二个活动(几乎)立即开始,当后台线程完成请求时,ui线程更新TextView
内容。
会发生什么:第二个活动只有在Geocoder
完成其工作时才开始。为了清楚起见,我们可以关闭 wi-fi 并单击按钮 - 预计五六秒,Geocoder
在日志中出现无法获取地理点的消息后,第二个活动启动。
我做错了什么?相关代码如下,完整的示例项目在 github 上。
android-handlerthread - 处理线程实例在创建线程后变为空
我在使用其处理程序线程实例退出线程时遇到空指针异常,实例值在创建后变为空。如果我将变量设为静态,那么我就不会遇到这个问题。谁能解释一下为什么 Handler 线程实例在创建后变为空,下面的代码将简要解释我的问题。
这是我的处理消息方法:
android - 如何自发更新 Listview?
我在ActionBar中有一个SearchView ,我正在使用onQueryTextListener。我在 ActionBar 所属的活动布局中有一个Listview 。ListView 中有两个 Textview。因此,当用户在 searchview 中输入文本时,会对文本执行 Web 查询(api),并使用接收到的结果(数组)来填充列表视图。就像 AutoCompleteTextView 一样,而是在列表视图中显示结果。
我正在使用HandlerThread来执行此查询并填充列表视图,并且我已经在onQueryTextChange中实现了它,它正在工作。
但是,问题是显示结果需要很长时间。用户完成输入后显示结果。但是,我希望在用户输入文本时显示结果(如谷歌建议)。我怎样才能做到这一点?
java - Android 中的 HandlerThread 安全性
好的,这是一个我认为不需要问的问题,但要么是长时间的工作,要么是诸如此类的问题,但我的头脑很模糊,所以就这样吧。
使用 HandlerThread、Looper 和 Handler 创建一个类:
两个线程(main 和looper mRunning
)都可以访问。因此,访问应该是同步的。你会选择哪种方式?使变量易失(以便两个线程都有最新的本地值),使isRunning
方法同步?或通过访问变量synchronized(mRunning){...}
?
最后,release
方法的实现,是否符合标准?还是你会选择其他方式?
android - HandlerThread 空异常 - Android
我以这种方式在我的应用程序中使用 ThreadHandler,
我像这样在 onCreate() 中初始化它,
它工作正常,问题是我需要添加其他东西,我必须开始另一个等待结果的活动,所以我必须初始化/使用它,如下所示,因为当我开始活动结果时,onActivityResult 在 onCreate 之前被调用,这次我遇到了错误
.
看起来线程没有被初始化,我在这里错过了什么?
编辑1,
在讨论了这里的问题之后,初始化处理程序似乎需要一些时间,我这样做了,它很丑但它正在工作,我应该怎么做有什么想法吗?
android - 如何在 Android 上高效地更新和获取 SQLite 数据库中的数据?
我正在制作一个应用程序,该应用程序从网站获取时间表并将其显示在我的应用程序中的一个不错的 ListView 中。为了在用户离线时使计划可用,我首先尝试将其保存在 SQLite 数据库中并从那里获取数据。这个想法是,当用户启动应用程序时,当用户按下刷新按钮时,以及在设定的时间由后台运行的服务更新数据库。
我的问题是:如何在不使用 UI 线程的情况下有效地从数据库更新和获取数据,从而不阻塞用户交互。
我认为我应该使用将任务放入队列的系统,以便在数据显示在我的 ListView 中之前更新数据库。除此之外,我对如何在 Android 上实现这样的系统一无所知。