首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使android服务处于挂起状态。

使android服务处于挂起状态。
EN

Stack Overflow用户
提问于 2010-01-16 06:08:11
回答 5查看 6K关注 0票数 15

下面是我用android脚本编写的Python脚本

代码语言:javascript
复制
import android, time

droid = android.Android()
interval = 1 # every 1 minute

while True:
    # define your own vibrate pattern here
    droid.vibrate(200)
    time.sleep(0.3)
    droid.vibrate(300)

    time.sleep(60*interval)

它基本上每分钟都在震动(就像激励器)。然而,当手机被锁上屏幕时,我感觉不到任何震动。也许Android正在冻结脚本(因此产生了while循环)?请注意,我确实是以服务的形式运行这个脚本的(长点击并单击'Start as service')。

有没有一种方法可以让这个脚本一直工作,而不管手机挂起状态?

更新1:我确实偶尔听到震动,而不是每分钟。而是随机的每5-10分钟一次。

更新2:如果我正常运行脚本(而不是作为服务),就会出现这个问题。似乎"time.sleep“没有在指定的时间内睡觉。

EN

回答 5

Stack Overflow用户

发布于 2010-02-05 15:41:56

脚本环境绝对是二等公民。您想要的是使用AlarmManager的ELAPSED_REALTIME。如果这在脚本环境中是不可用的,那么您将陷入困境。

至少目前,脚本环境并不打算完全替代开发工具包环境,在开发工具包环境中可以创建完整的应用程序。它的目的是允许您执行一些简单的脚本任务,而代价是不能做更复杂的事情。抱歉的。

票数 10
EN

Stack Overflow用户

发布于 2011-11-13 00:33:56

我也面临着同样的问题。

当安卓设备处于“锁定”模式时,time.sleep()是不可靠的:

以下是我在三星星系S上的SL4A release4 + pythonForAndroid_r5 +Android2.3.3上尝试过的一些东西

  • 将time.sleep(interval)循环包装在droid.wakeLockAcquirePartial()和droid.wakeLockRelease()中。这将防止CPU减速。
  • 使用eventWaitFor(eventName,timeOutInMilliSeconds)调用:

droid.eventWaitFor("ThisEventCannotHappen",间隔*60000)

  • 在我的设备上进行了几次测试之后,threading.Timer()对象似乎也像预期的那样工作(确认需要.)

我不确定,但您最好记住,在真正的“锁定/休眠”模式下,这些技巧可能会消耗比预期更多的能量,从而减少设备的运行时间。

更新: eventWaitFor()在长时间间隔内也不可靠。下面是展示Timer()如何工作的片段:

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2010-02-04 07:33:38

如果没有对AlertManager的支持,这在ASE中是不可能奏效的。您最好的选择是提交一个功能请求并等待它。或者,如果你觉得雄心勃勃,扩展ASE自己并提交补丁!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2076381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档