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

java - 为什么可运行的回调会自动销毁活动?

我想知道我们是否有可能postDelayed在android上处理/检测带有延迟(方法)的可运行回调?

例如,我handler.postDelayed(new Runnable()...的应用程序(用于测试目的的应用程序)上有一个或多个启动画面(与 一起运行)。在这个应用程序中,我还有一个库(我在应用程序中创建和使用它)和一些可用的类,它们在一个IntentService类上运行。

有时,当应用程序运行这些splashscreen活动(for Testing purpose)时,我正在创建的库可能会在 UI 中自动弹出一些活动。但是,如果这些活动出现在一个splashscreen活动上并且splashscreen正在被销毁,那么这些活动(自动弹出)也将被销毁并在 logcat 中记录“泄漏的窗口”消息。

问题是:

  • 那些自动出现在 UI 中的活动不应该自动关闭,这是被禁止的。它需要来自用户的交互来关闭该活动并返回到应用程序的正常行为。
  • 此外,该库对应用程序的用户界面一无所知。

所以我的问题是(相对于我正在创建的库方面,没有关于 UI 应用程序流程的信息):

  • 有没有办法检测是否在应用程序中相对于库端创建了一些postDelayed方法?如果是,我该如何处理这个问题?

PS:请注意,通常情况下,我正在为自动出现的假设活动使用对话框。

更新

图表

图表说明:

现在我有一个正在执行Splashscreen的案例。

扩展 IntentService 类的类已收到来自 Internet 的请求,该请求将启动Activity

同时启动画面打开postdelayed,另一个Activity已创建并显示在 UI 中。当 X 秒过去且另一个Activity没有被销毁时,会创建下一个 Activity并自动销毁另一个Activity在这样做时,Android 会相对于Activity抛出“泄漏窗口”消息。

0 投票
1 回答
386 浏览

android - 什么是 E/AbstractTracker:无法在未调用 Looper.prepare() 的线程内创建处理程序?

我过去曾遇到过这个问题,但我并没有想太多,因为我只是在尝试使用 IDE。但是,我意识到当我创建一个全新的应用程序时也会出现该错误,即使我没有添加自己的代码,我仍然会收到此错误,任何帮助解决此问题将不胜感激。

到目前为止,我已经尝试在 UI 线程和异步线程上运行方法,但仍然没有运气。

错误:

E/AbstractTracker:无法在未调用 Looper.prepare() 的线程内创建处理程序

D/AppTracker:应用事件:停止

E/AbstractTracker:无法在未调用 Looper.prepare() 的线程内创建处理程序

D/AppTracker:应用事件:开始

0 投票
2 回答
652 浏览

android - 子线程创建处理器的作用是什么?

1.我有一个关于在子线程中创建处理程序的问题

喜欢

上面的代码会崩溃。

2.我知道要在主线程中更新ui,handler在主线程中创建,然后在子线程中发送消息给handler就可以更新ui了。

3.我的问题是子线程中创建的处理程序的作用是什么?我们什么时候需要这样做?场景有什么用?

希望有人能解决我的困惑!</p>

0 投票
0 回答
98 浏览

java - E/AbstractTracker:无法在未调用 Looper.prepare() 的线程内创建处理程序

我无法弄清楚为什么这个错误不断发生。我刚刚安装了 2.3.3 版的 android studio 并具有以下基本代码。

关于如何解决这个问题的任何想法?

在此处输入图像描述

0 投票
1 回答
2291 浏览

java - Handler postDelay() from background thread

Can anyone see any reason why this would not be working?

I'm calling this in some arbitrary place in my activity but the reset() method is never called. In the logs I'm only getting the following

It looks like its blocking on postDelay.. even when I set the value to 1 or replace postDelay with pose, doesn't work.

Update:

when i implement like this, it works;

I think the problem has something to do with the fact that I was calling resetAnimations() from a background thread, and creating the handler on the background thread..

0 投票
2 回答
30521 浏览

android - FusedLocationProviderClient 何时以及如何停止 Looper?

我曾经使用 FusedLocationApi,直到我得知它已被弃用(请参阅下面的参考资料)。实施起来很简单。正如文档所说,您需要将它与 GoogleApiClient 结合使用

我最近更改为 FusedLocationProviderClient(请参阅下面的参考资料)按照教程,我能够成功地让 FusedLocationProviderClient 工作

教程:https ://github.com/codepath/android_guides/wiki/Retrieving-Location-with-LocationServices-API

我遇到的问题是 Looper 线程。即使应用程序在后台,Looper 线程也会继续运行。我想在应用程序处于后台时暂停位置更新,然后在应用程序处于前台时恢复位置更新。我怎样才能做到这一点?

参考:

  1. https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi
  2. https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient
0 投票
1 回答
622 浏览

android-ndk - ALooper_pollAll 什么时候返回 ALOOPER_POLL_TIMEOUT?

让我们假设,将一对带有相应回调的文件描述符添加到循环器中,然后调用 ALooper_pollAll(),超时时间为 1000 毫秒。不久之后,一些文件描述符变得可用,并且 looper 开始对它们调用回调。假设上次调用的回调恰好在 ALooper_pollAll 开始后200 毫秒后完成。现在,如果任何一个描述符上都没有更多数据,函数什么时候会返回 ALOOPER_POLL_TIMEOUT?是在 800 毫秒(回调完成后的剩余超时时间)之后,还是在 1000 毫秒(初始超时)之后?

0 投票
1 回答
319 浏览

java - 没有 UiHandler 的 Android HandlerThread 更新 UI

此代码工作正常并更新我的“TextView”并显示“Toast”,这是我的头痛,因为我试图传递 A Runnable obj 而不包括我的 UiHandler,因为它假设是更新我的 UI 线程的桥梁但是我的活动得到了更新,没有一个错误????? 这不应该是因为 CustomHandlerThread 应该是一个不同的线程

为什么会这样?

我的活动

公共类 TestActivity 扩展 BaseActivity {

我的处理线程

我按照这个链接作为参考

是我的线程在 MainThread 上运行还是 getLooper() 用 MainThread Looper 初始化我的 HandlerThread,这些日志消息是真的吗

请照亮我

0 投票
1 回答
541 浏览

android - 为什么 Looper 类中的 loop() 被多次调用

我有一段简单的代码,它启动了一个意图,但是当我调试它时,它会通过各种类,经常让我想知道为什么这些类每次都被调用,以及它们在恢复正常执行之前执行了哪些任务。

在此处输入图像描述

然后执行的控制转移到View类并调用performClick() 在此处输入图像描述

之后,它会进入Handler类并调用dispatchMessage(Message msg) 在此处输入图像描述 ,最后,它会多次调用loop()Looper类,然后才能恢复正常流程 在此处输入图像描述 那么有人可以在这里帮助我了解幕后发生的事情以及为什么这个 loop() 被多次调用吗?

0 投票
0 回答
202 浏览

android - 我们可以在不参考 UI 处理程序的情况下将消息传递给 UI 线程吗?

我有一个复杂的类系统,有许多类试图更新 UI 元素,所以我寻找最有效的方法来实现这一点。在我看来,使用处理程序是最好的解决方案(如果你知道更好的方法 - 请分享它)。但是有一些问题。如果我在单独的线程中使用此代码 - 发送的消息似乎会丢失(没有任何警告),并且 UI 处理程序不会发送它们:

这是 UI 处理程序的代码:

上面的代码不起作用......为什么我不能将消息传递给持有对 UI Looper 的引用的 UI 线程队列?如何在不将某些对象传递给后台线程的情况下更新 UI 线程?