2014-01-07 5 views
-2

Я новичок в Android. Я пытаюсь разработать калькулятор, который имеет домашний вид (активность), который отображается, как только приложение запускается некоторое время, а затем калькулятор запускается как новое действие. Чтобы подождать некоторое время на домашнем экране, я использую Thread.sleep(), как показано ниже.Использование Thread.sleep() для задержки выполнения некоторой части кода в java

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.first); 
    TextView loading = (TextView) findViewById(R.id.loading); 
    loading.setText("Loading..."); 
    try { 
     Thread.sleep(20000); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    startActivity(new Intent(MainActivity.this, second.class)); 
} 

Проблема заключается в том, что loading.setText("Loading...") не пишет не ничего TextView до 20 секунд, если поместить startActivity() в комментариях.

+0

Почему вы хотите, чтобы просто задержать всю программу на 2 секунды и распечатать ложное сообщение «загрузки»? Ты не «погрузка», ты спишь. – EJP

+1

@EJP моя догадка - это его всплывающая страница. – panini

+0

Это лучшая рекомендация для вас «Прочитайте книгу Android» и практикуйте «на лету», с такими проблемами, которые вам не удастся получить, хорошее понимание потоков/основной темы является ключевым для серьезного развития и не получается я ошибался, но я видел, как многие люди бросали Android, потому что они не тратят время на чтение перед реализацией, если вы действительно хотите делать приложения для Android, читайте книгу андроида перед кодированием ... –

ответ

1

Это потому, что вы вкладываете спать в пользовательский интерфейс. Только экран пользовательского интерфейса обновляет экран.

Посмотрите здесь примеры: http://developer.android.com/reference/android/os/AsyncTask.html

Вы хотите SetText(), которая будет выполнена в функции, которая вызывается с нитью выполнения задачи. Освобождение потока пользовательского интерфейса для обработки экранных записей.

+0

Спасибо большое :). Есть ли другие способы реализации моей идеи. – akhil

+0

Все, что вам нужно, это эффект заставки. – Sathya

+2

смотрите эту тему, например. http://stackoverflow.com/questions/5486789/how-do-i-make-a-splash-screen-in-android – Sathya

1

Вы фактически задерживаете основной поток пользовательского интерфейса. Используйте задачу async, чтобы начать новый поток позже.

+0

Многие много спасибо :), я новичок, если вы не поможете мне, пожалуйста, скажите мне, что такое асинхронная задача и как ее реализовать. – akhil

3

Добавив Thread.sleep() вызов вашего метода onCreate(), вы блокируете поток пользовательского интерфейса. Попробуйте заменить

try { 
    Thread.sleep(20000); 
} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
startActivity(new Intent(MainActivity.this, second.class)); 

с

Runnable launchTask = new Runnable() { 

    @Override 
    public void run() { 
     startActivity(new Intent(MainActivity.this, second.class)); 
    } 
}; 
loading.postDelayed(launchTask, 20000); 
Смежные вопросы