2012-06-17 103 views
1

我目前正在學習如何爲Android移動設備開發應用程序。如何在Android上暫停/延遲?

我寫了一個測試應用程序,在設備屏幕上顯示數字0-9。我創建了一個簡單的函數來延遲數字更改。

但是,在運行應用程序時,只顯示最終號碼。在最終數字顯示之前還有一段延遲。我假設暫停的長度是我定義的延遲乘以要顯示的位數。

如何創建一個應用程序來延遲更改數字?

public class AndroidProjectActivity extends Activity { 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     Main(); 
    } 

void Delay(int Seconds){ 
    long Time = 0; 
    Time = System.currentTimeMillis(); 
    while(System.currentTimeMillis() < Time+(Seconds*1000)); 
} 

void Main() { 
    String ConvertedInt; 
    TextView tv = new TextView(this); 
    setContentView(tv); 

    for(int NewInt = 0; NewInt!= 9; NewInt++){ 
     ConvertedInt = Character.toString((char)(NewInt+48)); 
     tv.setText(ConvertedInt); 
     Delay(5); 
    } 
} 
+0

你是模擬這個還是在真實硬件上運行? – Azulflame

+0

我正在使用AVD Android模擬器。 – Schmoopsiepoo

+0

嘗試將APK下載到實際設備 – Azulflame

回答

1

這樣做的一種方法是創建一個可更新視圖的runnable。這將仍然在UI線程上更新,但在後臺等待。在下面的代碼中可能會出現錯誤,但它應該稍微調整。

由於阻塞了UI線程,阻塞任何進入您的活動的系統調用都不好。應用程序未響應消息將強制關閉您的應用程序。這是另一個好的example

public class AndroidProjectActivity extends Activity { 
    private Handler mHandler; 
    private TextView mTextView; 
    private Runnable mCountUpdater = new Runnable() { 
     private int mCount = 0; 
     run() { 
      if(mCount > 9) 
       return; 
      mTextView.setText(String.valueOF(mCount+48)); 
      mCount++; 
      // Reschedule ourselves. 
      mHandler.postDelayed(this, 5000); 
     } 
    } 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     // Cleaner to load a view from a layout.. 
     TextView tv = new TextView(this); 
     setContentView(tv); 
     mTextView = tv; 
     // Create handler on UI thread. 
     mHandler = new Handler(); 
     mHandler.post(mCountUpdater); 
    } 
} 
1

嘗試創建一個threadwhich sleeps for certain interval of time,然後通過數值加1至9並使用Handler to update the UI

您還可以使用AsyncTask

0

主()的調用我阻塞UI,直到通話結束它不能顯示數字反對票。