2011-02-02 123 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

單程)是添加代碼來衡量你睡的實際時間。這通常是在動畫中做出的,例如,可以跳過一些幀以趕上實時。