【问题标题】:Code inside AsyncTask doesn't run smoothly when screen is off屏幕关闭时,AsyncTask 中的代码运行不流畅
【发布时间】:2013-03-12 06:48:48
【问题描述】:

在我的 AsyncTask 中,我以某种模式振动手机并重复此操作,直到用户将其关闭。只要屏幕打开,它就可以正常工作。如果屏幕关闭,代码仍会运行,但中间会定期中断。似乎Android试图在屏幕关闭的情况下消耗电池,并且只在线程(如我的AsyncTask)中定期运行代码。真的吗?或者这是其他一些行为?有没有办法让我的代码即使在屏幕关闭的情况下也能顺利运行?打开屏幕可能会耗尽电池电量。即使屏幕关闭,振动也会通知用户。

【问题讨论】:

  • 为了快速解决问题,我认为你可以让你的屏幕唤醒直到用户界面。我也很期待他们是否有任何真正好的解决方案。

标签: android android-asynctask screen


【解决方案1】:

您可以使用WakeLock。通过使用PARTIAL_WAKE_LOCK,您可以确保即使您的屏幕关闭,cpu 仍在运行并且您的代码将正确执行。

但是,我想补充一点,我从未遇到过AsyncTask 的此类问题,但如果您遇到此类问题,唤醒锁可能是解决方案。

【讨论】:

    【解决方案2】:

    AsyncTask 不是为处理长时间运行的任务而设计的。如果您希望您的手机长时间以特定模式振动,我建议您使用AlarmManager 设置重复闹钟。

    【讨论】:

    • 不确定您从哪里获得有关 AsyncTask 的信息,这些信息不是为长时间运行的任务而设计的。相反,它是并且我在整个应用程序中都很好地广泛使用了它。
    • 当然可以,但是有一些陷阱。在developer.android.com/reference/android/os/AsyncTask.html 上说“AsyncTasks 应该理想地用于短操作(最多几秒钟)。如果您需要保持线程长时间运行,强烈建议您使用 java 提供的各种 API .util.concurrent 包,例如 Executor、ThreadPoolExecutor 和 FutureTask。”。所以这就是我解释它的方式。
    猜你喜欢
    • 2017-06-14
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多