Search code examples
javaandroidtimer

Execute function after 5 seconds in Android


I am new in android development and now my launcher activity show only 5 seconds and after that I want to check the user is logged in or not function and perform the actions.

here is my code.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    exactPreferences = getSharedPreferences("ExactPreference",MODE_PRIVATE);
    setContentView(R.layout.activity_landing_page);

    session = exactPreferences.getString(Model.getSingleton().SHARED_SESSION_ID,null);
    Log.i("Session Id",session);
        displayData(); // I want to perform this function after 5 seconds.
}


private void displayData() {
    if(session.equals("")){
        Intent loginIntent = new Intent(LandingPage.this,
                LoginActivity.class);
        startActivity(loginIntent);
        Log.i("User Logged In", "False");
    }
    else
    {
        Intent objIntent = new Intent(LandingPage.this,
                IndexPageActivity.class);
        startActivity(objIntent);
        Log.i("User Logged In", "True");
    }

}

Solution

  • Updated: Using Kotin Couroutines:

    val job = scope.launch {
       delay(5000)
       displayData();
     }
    

    Here you can use GlobalScope, viewmodelScope, or lifecycleScope. To cancel this job you can call the cancel method.

    job.cancel()
    

    You can use the Handler to add some delay.Call the method displayData() as below so that it will be executed after 5 seconds.

    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
              displayData();
            }
        }, 5000);
    

    Note : Do not use the threads like Thread.sleep(5000); because it will block your UI and and makes it irresponsive.