Это плохая практика использовать нить.сон (миллисекунды) для ожидания немного, прежде чем начать другую деятельность?
Я делаю SplashScreen для приложения ... Когда приложение запускается ,оно начинает LoadingActivity... спите в течение 3 секунд, завершите (); а затем начните основную активность. Splash служит для обновления базы данных. Если база данных уже обновлена, я хочу, чтобы всплеск оставался в течение 3 секунд в любом случае.
Я использую следующий код:
protected void onPostExecute(Void result) {
super.onPostExecute(result);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
Intent intent = new Intent(LoadingActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}
Разве это плохая прическа? и почему? Приложение работает отлично в AVD.
3 ответа:
Спать в потоке пользовательского интерфейса-этоВсегда плохая идея. В этом случае вы находитесь в
onPostExecute
, который находится в потоке пользовательского интерфейса.Бросьте свой сон в метод
Пользователи не любят ждать заставок, поэтому лучше не ждать вообще. Но иногда заставка требуется (т. е. из-за контрактов).doInBackground
вашегоAsyncTask
вместо этого, и вы не получите никаких ANR там (Android не отвечает).
Да, это плохая практика,
onPostExecute()
вызывается в потоке пользовательского интерфейса, поэтому в основном вы блокируете поток пользовательского интерфейса на целых 3 секунды. Я подозреваю, что вы хотите показать заставку. Вместо этого вы можете сделать это вот так.new Handler().postDelayed(new Runnable(){ @Override public void run(){ Intent intent = new Intent(LoadingActivity.this, MainActivity.class); startActivity(intent); finish(); } },3000);
Или , если вы хотите придерживаться
AsyncTask
, то переопределитеdoInBackground()
и спите в нем и запустите свойActivity
вonPostExecute()
нормально.