问题标签 [android-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 回答
53 浏览

java - Loopers - 处理程序 - 线程

因此,我正在使用一些执行看似异步任务的代码,并使用典型的回调/侦听器模型来接收回调。

我的问题是,如果我阻止调用操作的线程,有时回调永远不会触发。

考虑以下代码片段:

的内部doAsync()使用处理程序和main looper.

考虑到我调用此代码,Thread A有人可以概述一下Thread A在此调用后阻塞右侧的效果。

另外,运行 Handler 的效果是什么,main looperlocal looper会确定执行上述回调的线程吗?我问这个是因为如果我阻塞Thread A,那么回调永远不会执行。

0 投票
0 回答
694 浏览

android - 使用 Looper.loop() 时如何停止线程?

我已经阅读了几乎所有与该主题相关的问题,但在“结束”线程之前它们都是完美的。

这是我尝试过的代码。我收到“不允许退出主线程”的消息。我只想在满足条件的某个时候退出线程。

0 投票
1 回答
3009 浏览

android - getLooper() 启动 HandlerThread 后返回 null

我有一个类 extends HandlerThread,它看起来像这样:

如上所示,该prepare()函数启动线程并等待run()完成,然后尝试获取 looper。

在另一个类中,我创建了一个MyHandlerThread& 启动它的实例:

控制台中显示的日志:

为什么在函数中,尽管线程已经启动(已执行)prepare(),但调用getLooper()返回null ?run()

0 投票
1 回答
79 浏览

java - 单击按钮后如何使用异步任务调用方法

如何在 AsyncTask 中调用方法?在我的 asynctask 中,这是我的 java 文件“xyz”中的一个内部类,当用户单击一个按钮时,它应该调用“xyz”中的一个方法,该方法也恰好是一个 alertDialog,我知道它会调用它,但是当它到达该方法时,应用程序崩溃并给出运行时异常,提示“无法在未调用 Looper.prepare() 的线程内创建处理程序”。我在这里查找了示例,但它引发了相同的运行时异常。我怎样才能让它工作?从 asynctask 中调用外部方法不是可能的吗?这是调用该方法的片段:

这就是所谓的方法:

0 投票
1 回答
693 浏览

android - 如何处理强制停止

我想知道如何在我的 android 应用程序中处理强制停止。该应用程序在 Activity 中包含一个 asynctask 类,如下所示:

应用程序运行无任何异常,但是,在用户强制停止后(使用三星 Galaxy S5 主页按钮左侧的菜单按钮),当应用程序重新打开时,它会显示“进度对话框”消息请稍候”位于 asynctask 的 onPreExecute 方法中并无限挂起。

当我调试时,我注意到应用程序挂在 Looper 类循环方法中:

我们如何确保应用程序摆脱这个无限循环?

谢谢你。

此致。

0 投票
0 回答
708 浏览

android - requestSingleUpdate 监听器不起作用

使用 requestSingleUpdate 不会触发 onLocationChanged 事件。

似乎它取决于附加的活套前:

模拟器和设备的结果不一样!

问题

  • 如果 requestSingleUpdate 被多次调用(使用不同的提供者),只有最后一个查询会被执行?
  • requestSingleUpdate 必须在 ui 线程上调用?如果没有,有一个技巧可以在外面调用它吗?

完整类:

谢谢大家。

0 投票
1 回答
286 浏览

android - NotifyBuilder 上的 java.lang.RuntimeException

我有这段代码,我想要两个不同的动作,我想显示一个经典通知来打开 MainActivity,另一个通知来做 LogoutTask,但是我有这个 java.lang.RuntimeException: Can't create handler inside thread没有调用 Looper.prepare()

我向您展示了我的 NotificationBuilder、AsyncTask 和错误。

通知方式

异步任务

错误

12-10 11:09:53.486 19138-19390/it.penta.kleim E/AndroidRuntime: 致命异常: AsyncTask #3 进程: it.penta.kleim, PID: 19138 java.lang.RuntimeException: Can't create handler inside在 android.os.Handler.(Handler.java:114) 在 android.app.Dialog.(Dialog.java: 119) 在 android.app.AlertDialog.(AlertDialog.java:200) 在 android.app.AlertDialog.(AlertDialog.java:196) 在 android.app.ProgressDialog.(ProgressDialog.java:82) 在 it.penta.kleim.sixteen.retro_asynctasks.DoLogoutTask.(DoLogoutTask.java:44)在 it.penta.kleim.sixteen.retro_gcm.MyGcmListenerService.sendNotification(MyGcmListenerService.java:107) 在 it.penta.kleim.sixteen.retro_gcm.MyGcmListenerService.onMessageReceived(MyGcmListenerService.java:75) 在 com.google.android.gms .gcm。GcmListenerService.zzq(Unknown Source) at com.google.android.gms.gcm.GcmListenerService.zzp(Unknown Source) at com.google.android.gms.gcm.GcmListenerService.zzo(Unknown Source) at com.google.android。 gms.gcm.GcmListenerService.zza(Unknown Source) at com.google.android.gms.gcm.GcmListenerService$1.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java。 util.concurrent。ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 在 java.lang.Thread.run(Thread.java:818)

0 投票
2 回答
1597 浏览

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

使用以下代码:

一段时间后(不是确切的情况)我有以下错误:

java.lang.RuntimeException:每个线程只能在 android.os.Looper.prepare 创建一个 Looper

有谁知道我哪里出错了?

0 投票
1 回答
1793 浏览

android - java中的loopers与没有looper的线程,以及停止looper的正确方法?

我的问题是关于 java loopers 以及如何以正确的方式阻止它们。

可以说我有一个线程定义是这样的:

我有另一个几乎相同的线程,但带有一个活套:

现在如果我这样做: new NoLooperThread().start();我想知道 2 秒后这个线程可能会死,但如果我这样做:new LooperThread().start(); 线程继续永远阻塞?我的假设正确吗?

我将如何停止这个线程?我知道我需要打电话Looper.myLooper().quit();来停止阻塞,但最好的方法是什么?我应该通过处理程序发送消息来阻止它吗?

那么 Looper 的目的有两个:它创建一个消息队列但也保持一个线程处于活动状态,这个假设是否也正确?

我的问题是在这里阅读 SO 问题后提出的

0 投票
3 回答
19294 浏览

android - Android - myLooper() 与 getMainLooper()

只是澄清一下,但在主线程上的 Android 活动中,如果我调用Looper.myLooper()vsLooper.getMainLooper()返回相同的引用,对吗?他们是一样的东西?我知道我通常不必调用这些,因为 Android 会处理这个问题,但我想知道从主线程调用它们时它们有何不同?

如果我从主线程调用

它们都给出了相同的运行时异常,所以我假设它们是相同的参考:

引起:java.lang.RuntimeException:主线程不允许退出。

谁能确认?