我面临着同样的问题。
当您的 android 设备处于“锁定”模式时,time.sleep() 不可靠:
这是我在三星 Galaxy S 上的 SL4A release4 + pythonForAndroid_r5 + android 2.3.3 上尝试过的一些东西
- 在 droid.wakeLockAcquirePartial() 和 droid.wakeLockRelease() 中包裹一个 time.sleep(interval) 循环。这将防止 CPU 变慢。
- 使用 eventWaitFor(eventName, timeOutInMilliSeconds) 调用:
droid.eventWaitFor("ThisEventCannotHappen", interval*60000)
- threading.Timer() 对象似乎也按预期工作,在我的设备上进行了一些测试(需要确认......)
我不确定,但您最好记住,在真正的“锁定/睡眠”模式下,这些技巧可能会比预期消耗更多的电量,从而减少设备的运行时间。
更新: eventWaitFor() 在很长的时间间隔内也不可靠。这是一个显示 Timer() 如何工作的片段:
import android
import threading
import logging
def doStuff():
logging.info("testTimer.py: Stuff DONE")
droid.notify('testTimer.py',"doStuff() has been called")
droid.vibrate(500)
def createLog(path):
logging.basicConfig(filename=path,
level=logging.INFO,
format='%(asctime)s %(message)s')
DELAY=600
droid=android.Android()
logpath="/mnt/sdcard/testTimer.py.log"
createLog(logpath)
timer=threading.Timer(DELAY,doStuff)
logging.info("timer starting now")
timer.start()
logging.info("doStuff() will be called by timer...Delay=%d" % DELAY)