Я полагаю, поскольку SplashActivity
само по себе является действием, нормально блокировать пользовательский интерфейс, верно? AsyncTask
иногда запускается не постепенно, если вы хотите, чтобы обновление отображалось плавно, как насчет перехода на рабочий Thread
и Handlder
.
- Создать
Handler
inside SplashActivity
- В главном потоке отображать прогрессбар или заставку или что угодно
- При создании другого потока для запуска обратного отсчета раз в секунду
sendEmptyMessage()
до Handler
. Через 5 секунд отправьте сообщение на Handler
, чтобы закрыть диалоговое окно и всплеск, после чего рабочий Thread
завершится.
ОБНОВЛЕНО: Извините за медленную обратную связь. Как насчет этого? Я еще не проверял, и это не лучшая реализация, вы можете использовать эту логику
public class SplashActivity extends Activity {
private static final int SPLASHTIME = 5000;
// u can change the value here for smoother effect
private static final long UPDATEINTERVAL = 1000;
private ProgressBar progressBar;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.splash);
progressBar = (ProgressBar) findViewById(R.id.progression);
new Thread(new Runnable(){
@Override
public void run(){
int progress = 0;
while(true){
// send current progress to handler
mHandler.sendEmptyMessage(progress);
// break from the loop after SPLASHSCREEN millis
if(progress > SPLASHSCREEN)
break;
// increase the progress
progress = (int) (progress + UPDATEINTERVAL);
// sleep the worker thread
Thread.sleep(UPDATEINTERVAL);
}
}
}).start();
}
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message message){
// get the current progress
int progress = message.what;
if(progress <= SPLASHTIME){
progressBar.setProgress(progress);
}
else{
// finish splashActivity here & do what u want do to after splashscreen, for example
finish();
Intent intent = new Intent(SpashActivity.this, MenuActivity.class);
startActivity(intent);
}
}
}
}