Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 初学者问题:Wakelocks_Android_Wakelock - Fatal编程技术网

Android 初学者问题:Wakelocks

Android 初学者问题:Wakelocks,android,wakelock,Android,Wakelock,我对WakeLock的概念不太熟悉,需要你的帮助 问题: 我假设WakeLock是某种类型的锁,当被执行代码持有时,它会阻止设备睡眠。如果设备已经处于睡眠/待机模式,那么代码会执行吗?假设它永远不会获得唤醒锁 当一个长时间运行的任务(abt 7-8秒)在后台线程(AsyncTask)中完成时,我是否应该为保持唤醒锁而烦恼?AsyncTask是否已经为我获取了它 欢迎链接到官方文档和wakelocks的书面文档 谢谢。1.如果手机处于完全睡眠模式,除了来电之外,您还可以使用AlarmManager

我对WakeLock的概念不太熟悉,需要你的帮助

问题:

  • 我假设WakeLock是某种类型的锁,当被执行代码持有时,它会阻止设备睡眠。如果设备已经处于睡眠/待机模式,那么代码会执行吗?假设它永远不会获得唤醒锁

  • 当一个长时间运行的任务(abt 7-8秒)在后台线程(AsyncTask)中完成时,我是否应该为保持唤醒锁而烦恼?AsyncTask是否已经为我获取了它

  • 欢迎链接到官方文档和wakelocks的书面文档


  • 谢谢。

    1.如果手机处于完全睡眠模式,除了来电之外,您还可以使用AlarmManager意图唤醒手机

    从类文档中:

    报警管理器保持CPU唤醒 锁定只要报警接收器 正在执行onReceive()方法。这 保证手机不会 睡到你处理完为止 广播。一旦接收() 返回,则报警管理器释放 这是尾流锁。这意味着 在某些情况下,手机会尽快入睡 当onReceive()方法完成时。 如果你的闹钟响了 Context.startService(),这是可能的 手机会在开机前休眠 请求的服务已启动。到 防止这种情况,你的广播接收器 服务将需要实现一个 单独的唤醒锁定策略以确保 手机会一直运行到 该服务可用

    2.如果您正在使用,您将希望将结果发布到上的UI线程

    从文件中:

    AsyncTask允许正确且轻松地使用UI线程。此类允许在UI线程上执行后台操作和发布结果,而无需操作线程和/或处理程序

    3.我建议您阅读官方文档,其中对WakeLock概念有很好的介绍

  • 通常,手机睡眠时运行的唯一代码是
    广播接收器
    。实际上,手机会唤醒一秒钟,运行
    广播接收器的代码,然后再次入睡。由于您不应在
    广播接收器
    中运行长代码(使用它来启动
    服务
    ),因此您基本上可以假设您的代码在手机睡眠时从未运行过。当然,如果您使用
    BroadcastReceiver
    启动
    服务
    ,通常应获得唤醒锁

  • 使用由用户启动的
    AsyncTask
    ,您实际上不需要担心唤醒锁。手机在运行时不太可能睡眠。我不确定他们是否有唤醒锁,但在运行标准的
    AsyncTask
    任务时让我的手机处于睡眠状态似乎不会中断它

  • 正如斯特德所说,看看这个:


  • 基本上,你唯一需要担心WakeLocks的时候是当你期望你的任务会因为睡眠而被打断(就像你设置了一个短时间唤醒手机的闹钟)或者你绝对不能让任务被打断。否则,请确保您优雅地处理任何中断。

    我也想知道这一点。具体来说,手机在什么情况下会进入睡眠状态?如果我在手机处于唤醒状态时启动一个连续的活动(在我的情况下上载一个文件),那么在我的进程工作时,手机是否有可能睡眠?我的测试表明,您可以使用警报触发服务,因此您根本不需要广播接收器。如果我错了,请有人纠正我(也许它只适用于某些版本的操作系统)。同时,请参阅,以了解有关在设备完成任务之前保持其唤醒状态的服务的讨论。