I am writing Android application which contains two activities: MainActivity
and SplashActivity
. When MainActivity
starts it takes some time to load UI and also it is doing some work in background. So in order not to show incomplete UI (white screen etc.) I decide start my MainActivity
and right in its onCreate()
method start SplashActivity
and after some time close SplashActivity
so I assume that at that point my MainActivity
will be already loaded. So for this I tried the code below:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
Intent intent = new Intent(LoginActivity.this, SetPassword.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
.........
}
}
In a manifest file as a LAUNCHER
activity is set MainActivity
. This code follows as following:
MainActivity
is shown.MainActivity
SplashActivity
comes to front.But I need following behavior
MainActivity
starts in 'background'SplashActivity
come to front and after some time close itselfYou can use an AsyncTask
. Start firs the SplashActivity
and when all your necessary data is loaded, start the MainActivity
. Try something like this:
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// Load your data here
return null;
}
@Override
protected void onPostExecute(Void result) {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
}
};
asyncTask.execute(null, null);
}
}