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

android - 找出 Looper 或 HandlerThread 中的泄漏问题

我使用了一些处理程序,例如

它每 15 秒执行一次,有时它开始抛出一些警告,例如

我的编程方法有什么问题吗?我仍然不明白这段代码的泄漏在哪里。

0 投票
3 回答
97 浏览

android - for() 循环不会持续

我在数据库项目中有 6 条记录。For 循环读取每条记录,然后检查转换到动态数组的结果。但是For循环不能一直持续到最后!For循环检查第三条记录!

编辑 :

之后的吐司代码:

结果:

在此处输入图像描述

0 投票
3 回答
29 浏览

android - 重构以修复架构错误

在一个可以工作的应用程序中,我看到了这个可怕的代码:

也许您已经看到了这段代码的问题。如果没有,它们是:

  1. mHandler附加到 UI 线程(因为它是由加载类的线程创建的,也就是主线程)

  2. 没有活套(这实际上是错误

  3. 该线程浪费CPU时间并耗尽电池

  4. someDataStructure不是线程安全的,但同步基本访问操作无济于事;在无限循环中同步大块代码可能会阻塞受保护的资源并使其对其他线程不可用;最后,不仅如此someDataStructure,整个类都基于只有一个线程可以运行其代码的假设。

  5. 我不能只添加looper,因为run()必须运行无限循环,同时Looper.loop();也是一个无限循环。一个线程不能运行两个无限循环。

尽管有这个史诗般的架构失败,但代码确实在做一些事情,它不能立即重写,它是 4K 行代码,而且我通常只能猜测代码真正做了什么。

我需要重构它。它应该是一系列保留功能的小步骤。

我如何重构这个了不起的代码?

0 投票
1 回答
697 浏览

android - IntentService 和 HandlerThread 计数

正如文档所说,我试图了解 intentService 如何在单个后台线程中完成所有工作。所以我潜入源代码,并有一个问题

所以在 onCreate 服务中创建了一个 HandlerThread。在此之后,所有 onStartCommand 调用将消息添加到 HanlderThread 队列。
但是假设服务接收到多个意图,并将所有意图添加到队列中。但是在处理完第一条消息之后,handleMessage 中 onHandleIntent 之后的下一个调用是stopSelf(msg.arg1); . 据我了解,在此之后,服务被破坏,但 HandlerThread 继续处理消息。在销毁之后,假设我再发送一个服务意图。由于 intentservice 被销毁,因此调用 onCreate 并创建另一个 HandlerThread!!, 之后没有几个 Worker 线程,不像文档所说的 Single 。有人可以解释一下,我哪里错了吗?

0 投票
0 回答
2684 浏览

android - HandlerThread 空异常 - Android

我以这种方式在我的应用程序中使用 ThreadHandler,

我像这样在 onCreate() 中初始化它,

它工作正常,问题是我需要添加其他东西,我必须开始另一个等待结果的活动,所以我必须初始化/使用它,如下所示,因为当我开始活动结果时,onActivityResult 在 onCreate 之前被调用,这次我遇到了错误

.

看起来线程没有被初始化,我在这里错过了什么?

编辑1,

在讨论了这里的问题之后,初始化处理程序似乎需要一些时间,我这样做了,它很丑但它正在工作,我应该怎么做有什么想法吗?

0 投票
0 回答
189 浏览

android - android.os.Looper 是否有“中断”方法?

我是 Android 开发新手(来自 C/C++,Win32 世界)。

我正在尝试编写一个应该处理各种回调(系统事件、计时器)的单线程服务。

我需要的是(某种)模态消息处理循环的模拟。也就是说,我希望能够调用一些等待满足某些特定条件的函数。但是,在等待期间,线程应该“在后台”处理所有事件。实际上,我们等待的条件是由其中一个回调触发的。

此外,那些“模态消息处理循环”可能是嵌套的。也就是说,在等待一个条件时,我可能需要在回调中运行另一个消息处理循环,等待另一个条件。

而且我不想要多线程。一切都应该在单线程中处理。

从我在文档中找到的最接近我需要的匹配是使用类似Handler.getLooper().loop()运行循环和Handler.getLooper().quitSafely()触发循环中断的东西。

但是文档有些混乱。目前尚不清楚是否允许递归调用此函数。此外,还不清楚是否quitSafely()可以再次使用循环之后。文档指出这quit()确实是循环器调用的最后一个函数,之后它不再可用,但是quitSafely()它指出:

在循环终止之前,将不会传递具有未来到期时间的未决延迟消息。

这是否意味着循环终止后 - 它可以再次使用?

如果没有,还有哪些其他可用选项?我可以明确控制消息循环吗?Win32中类似于GetMessage/的东西?DispatchMessage

0 投票
1 回答
39 浏览

android-looper - Android - 空指针执行()和 DialogProgress AsyncTask

我在下面有这段代码,基本上是我的应用程序的登录过程,为什么我有空指针?我是否正确实现了它,我尝试对 AsyncTask 使用静态以避免任何内存泄漏。

登录.java

0 投票
2 回答
2633 浏览

android - Animation in Android and Multithreading

In trying to add animation to ImageViews, I don't seem to get the multithreading right which is giving me incorrect results.

This is the part where I am calling the animation >>

The problem here is that when I was not creating a separate thread, for the startAnimation() function, all 3 calls happened simultaneously and everything got messed up. But still now it is not working perfectly and the 1st & 3rd calls are jumbled up.

I tried to experiment with join() but it didn't work out, it is giving more radical outcomes now. I thought that using join() will ensure excution of the previous calls to startAnimation() before starting a new.

EDIT: I have tracked the issue and the issue is that my startAnimation() function is being called when the main Looper is running. So it is being executed after all three calls to the function has been made. I need to ensure that startAnimation() runs at the time when I make the call, and is executed before the next call to the same function happens. Any ideas how to ensure this?

0 投票
1 回答
910 浏览

android - Alooper_addFd data parameter

I am not sure how this function works. This is prototype:

What is this 'data' pointer? If callback is not NULL, 'data' should be custom data passed to callback. But, if callback is NULL, what is 'data' parameter used for? Or it have to be NULL also, in that case?

Is there any detailed documentation about this? Thank you in advice!

0 投票
3 回答
1081 浏览

android - How do i stop loop

I am creating a Sms spamming app that will send a user defined number of sms to a specific number.

So i used a for loop. And made a stop button that should terminate this for loop. can anyone help out how to stop this for loop and app should go in its initial state. Because i tried "break" "System.exit(0)" everything. but the msgs doesnt stops sending until the counter is finished.