问题标签 [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 投票
1 回答
881 浏览

android - 强制刷新UiThread android的MessageQueue

我想尽快将内容刷新到显示器,但我希望在 UI 线程上拥有的设置代码花费的时间太长。在一切完成之前,屏幕上不会呈现任何内容。

因此,如果我执行 View.postDelayed(Runnable, long) 延迟至少 100 毫秒,则布局会在设置开始之前呈现。我想要做的是在 onResume 屏幕上呈现布局(例如),然后继续设置。

我正在寻找一种方法来确保 Looper 清空它的 MessageQueue 并呈现所有内容,直到调用此方法,然后继续处理消息。

我可能应该在后台线程中运行设置,但这会使其他事情复杂化。

0 投票
2 回答
357 浏览

android - AsyncTask 取消方法抛出处理程序错误

我有一个简单的活动,我用一个按钮启动一个 AsyncTask 并用另一个按钮停止它。

在 AsyncTask 中,我使用 LocationListner 从 GPS 传感器获取更新并计算获得的位置之间的距离。

当我按下开始按钮时,会创建新线程并且代码工作正常。从调试的角度来看,我可以看到 GPS 更新被定期捕获,并且我的变量也相应地更新。

但是,当我按下取消按钮时,问题就开始了。在文档(http://developer.android.com/reference/android/os/AsyncTask.html)中,我读到 cancel() 方法应该在 doInBackground 代码完成时调用 onCancelled() 。出于这个原因,我提出:

到处都是 doInBackground 方法,希望它能让我摆脱困境。不幸的是,我什至没有到达那部分。有一次,当我按下结束按钮时,我收到以下错误:

任何想法,这个错误的背后是什么。这是完整的代码。(构建目标是 Android 4.0.3)。该代码在 HTC One V 上进行了测试。

0 投票
1 回答
453 浏览

android - 广播接收器和烘烤

全部,

我有一个没有关联布局或任何活动的广播接收器。它正在监听某些人从音频插孔中拔出某些东西。

我已经能够让我的接收器工作并发出通知。我的问题是如何使用没有主要活动或主要布局的接收器显示 Toast 消息?

现在我发现一两个帖子基本上说这不能完成,因为你需要一个活套来让 Toast 工作。Android + SMS 接收器 + Toast = 失败

除了这个链接http://developer.android.com/reference/android/os/Looper.html之外,我不熟悉 Loopers 。

有没有办法从广播接收器的 onReceive 方法创建一个 IntentService,该方法在工作线程上有一个循环器,使我能够在我的接收器被触发时引发 Toast?

0 投票
2 回答
3377 浏览

android - 我们什么时候应该在 Android 中使用 Looper?

有人可以告诉我什么时候应该在处理程序中使用 Looper 吗?我有一个代码库,其中有多个线程和处理程序。但是Looper.prepare()Looper.loop()没有要求所有这些。

我的疑问是我们是否需要 looper 来持续处理 handleMessage 方法中的消息?即使我们没有looper,当消息发送到处理程序时,不会调用handleMessage()吗?Looper 在这里还有什么额外的用途?

谢谢, 沙米

0 投票
1 回答
1056 浏览

java - AlertDialog:显示对话框后,后台 Canvas 渲染继续,但对话框永远不会关闭

这是我的 AlertDialog 无响应状态的屏幕截图:

来自 DDMS 的屏幕截图显示对话框无响应,但渲染线程继续运行。

在背景中,绿色瓷砖,黑白目标内的红球,所有三个位图都在渲染线程上连续渲染,该渲染线程锁定/解锁我手机上的背景画布。无论我在 EditText 中输入了什么文本,当我按下 OK 按钮时,总是会执行这个无响应的操作。

这是代码:

PlayActivity 类:

由于某些未知原因,AlertDialog 仅在调用 AlertDialog.show() 之前存在准备好的 Looper 时才会执行。

问题是在调用 AlertDialog.show() 之后,在调用 Looper.quit() 之后,AlertDialog 不知何故没有退出,这使得手机无响应。

当我在 onClick() 方法中调用 PlayActivity.this.finish() 时,我可以退出对话框,停止后台渲染,然后返回主菜单(这是我想要的),但是 Eclipse DDMS 报告了这个:

简而言之,当我想通过调用 finish() 退出 PlayActivity 时,AlertDialog 会泄漏。我不知道还能做些什么来解决这个问题。

请帮我。谢谢!如果您需要更多源代码,请告诉我。

编辑:

就在泄漏错误出现之前,这是 DDMS 记录的内容:

0 投票
2 回答
2225 浏览

java - 如何在背景渲染时让 AlertDialog 工作,而不会使应用程序崩溃?

这是来源:

你知道当一个游戏结束时,游戏会要求玩家输入一个名字,这样记分板上就会有一个名字和一个分数吗?通常,就是这样。我有一个将所有 3 个对象都渲染到屏幕上的游戏。当满足某个条件时,游戏会出现一个对话框,询问玩家的名字并祝贺玩家完成它。

正是这个为玩家名字弹出对话框的简单任务引起了很多头痛。上面给出了提供的源代码。

当线程处于紧密循环中时(例如游戏循环),当程序想要向用户显示对话框时,通常推荐的执行方式是什么?为什么 Looper.prepare() 在这种情况下有用?

我无法理解这一点。:(


编辑(更多信息):

我尝试使用 AsyncTask,它真的让我更加困惑。并不是说我不想使用 AsyncTask,而是一个简单的“在背景更改颜色时显示对话框”工作如何变得越来越难以修复?

日志猫:

来源:


编辑#2(runOnUIThread() 和 onTouchEvent(MotionEvent e) 锁定,源代码如下:


编辑#3(我认为这是当天的最后一次编辑)

这是迄今为止我得到的“解决方法”。所有功劳都归功于 Nate 的帮助。

0 投票
1 回答
49 浏览

multithreading - 如何获取由第一个活动使用意图启动的辅助活动的处理程序?

我的项目中有一项主要活动,我正在使用意图开始一项次要活动。在一个单独的线程上,我想获取第二个活动的处理程序,以便将一些控制消息发送到第二个活动。如何接收我已开始使用意图的第二个活动的处理程序?

0 投票
2 回答
2834 浏览

android - Android Handler.getLooper() 返回 null

我有以下问题。我用 Looper 实现了我的线程。

}

我想做以下事情:

其中 lm 是 LocationManager。从我的日志和测试中,我可以说locationThread.handler.getLooper()返回 null 而不是 Looper。

我不知道为什么它是空的。我试图打电话给locationThread.isAlive()返回true。我也试图得到locationThread.handler;我知道不为空的。我也做了很多谷歌搜索,但我没有找到比文档更多的东西。

非常感谢您的回答。

0 投票
3 回答
4407 浏览

android - 线程,无法在未调用 looper.prepare 的线程内创建处理程序

我在尝试调用时收到“无法在未调用 looper.prepare 的线程内创建处理程序”错误,

locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);

但是,如果我不在线程内调用它( run() )它工作正常..我该怎么办?

编辑:MyAlarmService.java

GetAlarmCoordinates.java

0 投票
2 回答
548 浏览

android - 循环中的 Asynctask 在 2.3 和更早版本上出现错误

最近,我遇到了越来越多的错误,这些错误对于有经验的人来说似乎很容易,但对我来说却很难弄清楚。

我正在尝试创建一个后台服务,每 X 分钟检查一次新的提要条目。因此,我从服务开始一个循环,并且该循环创建了一个异步任务。

它在我的 4.1 手机上就像一个魅力,但在我的 2.3 模拟器上,它提供了以下力量关闭:

我意识到这通常意味着我正在尝试在非 UI 线程中执行 UI 操作,但事实并非如此。事实上,即使我注释掉 ASyncTask 中的所有活动,它仍然会强制关闭。当我注释掉开始循环的行时,它只会停止强制关闭

这只发生在我的 2.3 模拟器上,与我使用的 4.0 样式通知无关。

有人会对此有更多了解吗?

谢谢!

编辑-> 如果我调用 Looper.prepare() 我会得到每个线程可能只发生一次的错误。