В настоящее время я изучаю, как разрабатывать приложения для мобильных устройств 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);
}
}
Один из способов сделать это - создать runnable, который обновит ваше представление. Это будет по-прежнему обновляться в потоке пользовательского интерфейса, но ждать в фоновом режиме. Возможно, в приведенном ниже коде могут быть ошибки, но они должны работать с небольшими изменениями.
Блокирование любого из системных вызовов в вашей деятельности не очень хорошо, поскольку вы блокируете поток пользовательского интерфейса. Ваше приложение будет принудительно закрыто с сообщением "Не реагировать на приложение". Вот еще один хороший пример.
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);
}
}
Попробуйте создать thread
, which sleeps for certain interval of time
, а затем увеличивайте значение на 1 до 9. И используйте Handler to update the UI
.
Вы также можете использовать AsyncTask
Вызов main() я блокирует пользовательский интерфейс, чтобы он не мог отображать числа до тех пор, пока вызов не будет завершен.