2011-02-02 57 views
1

我有一个for循环作为我的代码中的后台线程的一部分。在循环内执行代码的一部分,我想等待一段时间,所以我调用thread.sleep。我发现如果在等待期间电话显示屏关闭,等待时间变得不稳定。根据文件睡眠是不可靠的时间。所以我想知道要替代什么。据我可以看到,如果我创建一个后延迟的子线程,我将失去for循环内的连续性。我希望我错了,并没有正确理解机制 - 任何帮助表示赞赏。 Ron什么替代thread.sleep

回答

0

你可以使用Handler并拨打postDelayed?我真的不能声称这将是多么可靠,或者它是否适合你的问题,但我用它来进行小规模的定期更新。

您也可以查看Partial Wake Locks以查看这是否会给您更可靠的性能。

+0

如果我调用postDelayed,我如何返回到我的解释中所述的for循环代码?我刚刚查找了PartialWakeLocks,并且有一个重要的电力消耗预警。如果可以的话,我特别想保持电力使用量低,而且这种睡眠状况可能会出现很多次。 – ron 2011-02-02 19:57:03

+0

使用postDelayed的想法是让你的循环中的东西成为一个由处理程序调用的工作单元,它会重新运行(取代当前的睡眠)。在唤醒锁定是的,你必须小心,不知道你在做什么,我不会以任何方式争论,但我只是想给你一些想法。 – 2011-02-02 20:26:19

0

你需要的东西是这样的:对付睡眠的不可靠性(

(...) 
Message msg = new Message(); 
try { 
    myHandler.sendMessageDelayed(msg,1000); 

      } catch (Exception e) { 
       Log.d(TAG,"Hum?",e); 
      } 
     } 
    } 


    private Handler myHandler= new Handler() { 
     /* 
     * (non-Javadoc) 
     * 
     * @see android.os.Handler#handleMessage(android.os.Message) 
     */ 
     @Override 
     public void handleMessage(Message msg) { 
      //DO WHAT YOU WANT.. 
     } 
    }; 
1

单程)是添加代码来衡量你睡的实际时间。这通常是在动画中做出的,例如,可以跳过一些帧以赶上实时。