Search code examples
androidcountdownbackrestartcountdowntimer

How to restart count down timer if I come back to activity?


I have an entrance layout which needs to be seen for 3 seconds. If I start the app it stays 3 seconds and activity changes, that's okay but the problem is, if I come back to this activity via backpress of smartphone while I am using the app avtivity doesn't change after 3 seconds. I am new and couldn't find out problem ? Could you please help me ? Thanks

public class A1CoverPage extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a1cover_page);

        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        getSupportActionBar().setCustomView(R.layout.a0action_bar);

        new CountDownTimer(3000, 1000) {

            public void onTick(long millisUntilFinished) {

                EditText mTextField = (EditText) findViewById(R.id.editText);
                mTextField.setText(" Loading... ");

                ImageView mImageView = (ImageView) findViewById(R.id.imageView);
                mImageView.setImageResource(R.drawable.amblem);    
            }

            public void onFinish() {

                Intent intent = new Intent(A1CoverPage.this, A2ExperimentCalibration.class);
                startActivity(intent);

            }
        }.start();    
    }

Solution

  • onCreate will be executed only first time , when your activity is created , but when you come back to this activity then onCreate will not be executed again.

    so override onstart method in Activity and move your code inside onstart

    EditText mTextField;    
    ImageView mImageView;
    // ^^^^ declare views references 
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a1cover_page);
    
        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        getSupportActionBar().setCustomView(R.layout.a0action_bar);    
    
        mTextField = (EditText) findViewById(R.id.editText);
        mImageView = (ImageView) findViewById(R.id.imageView);
        // ^^^ initialize views
    }
    
    @Override
    protected void onStart() {
        super.onStart();
    
        new CountDownTimer(3000, 1000) {    
            public void onTick(long millisUntilFinished) {    
                mTextField.setText(" Loading... ");    
                mImageView.setImageResource(R.drawable.amblem);
            }
    
            public void onFinish() {    
                Intent intent = new Intent(A1CoverPage.this, A2ExperimentCalibration.class);
                startActivity(intent);    
            }
        }.start();
    }
    

    Improvements : Declare your view in class and initialize them in onCreate instead of internalizing them everytime in your timer anonymous class