Android TimerTask 不总是被调用(主要是在手机没有被调试时不被调用)

标签 android audio timer handler timertask

我无法识别 Android TimerTask(我相信)上让我发疯的问题,

场景是:我在调用电话后使用 PhoneStateListener 启动计时器,并在特定通话时间后重现声音。

一切都很完美,但只要我不在 Debug模式下(或者只是将手机插入计算机),声音并不总是听起来,大多数时候它并不听起来。

我最大的问题是我无法清楚地识别问题,因为这只发生在手机被拔掉并且我无法读取日志时。我只能重现该问题一次(通话后没有声音)并阅读有关它的日志,在那里我意识到:onCallStateChanged 被调用,Timer 正常,但 TimerTask 从未被调用(或计划)。

因此,在这里阅读了一些问题之后,我使用了 Handler 而不是 Timer。但我有完全相同的问题。事实上,使用 Handler 时,通过简单地插入和拔出电话就更容易重现此问题(使用 Timer 重现无声音问题更困难)。

我是在做错事还是需要执行其他操作?

任何评论将不胜感激,
提前致谢

编辑

显然,使用 Handler 会发生这种情况,因为电话一开始就进入休眠状态。但是,使用 wake_lock 并不能防止这种情况发生,当手机处于 sleep 状态时,是否还有其他替代方法可以运行线程?

最佳答案

好吧,正如我所说,这个问题是电话在通话期间进入休眠状态时停止了计时器。我结束了使用 AlarmManager。

需要注意的是,AlarmReceiver 必须是公共(public)类,否则将永远不会调用接收方法。

但是,我仍然不明白为什么 Timer 有时工作有时不工作。

问候

关于Android TimerTask 不总是被调用(主要是在手机没有被调试时不被调用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9643817/

相关文章:

python - pygame.time.set_timer 困惑?

c++ - 这是将循环锁定为每秒 60 个循环的好方法吗?

android - 如何在 android 中启用 SQLITE_ENABLE_UPDATE_DELETE_LIMIT?

Android adapter.notifyDataSetChanged() 不工作?

android - 创建通知时出现空指针异常

android - 检查在 MediaPlayer 中打开了哪个音频文件

android - Android中带回调函数的通用定时器类

android - 在 Cordova 应用程序中清除缓存

c# - 设置输入到波形文件

android - Soloud + OpenSLES 后端,非 Activity 音轨