У меня такая же проблема.
time.sleep () не является надежным, когда ваше устройство Android находится в «заблокированном» режиме:
Вот несколько вещей, которые я пробовал на SL4A release4 + pythonForAndroid_r5 + android 2.3.3 на samsung galaxy S
- оберните цикл time.sleep (интервал) внутри droid.wakeLockAcquirePartial () и droid.wakeLockRelease ().
Это предотвратит замедление процессора.
- использовать вызов eventWaitFor (eventName, timeOutInMilliSeconds):
droid.eventWaitFor ("ThisEventCannotHappen", интервал * 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)