Search code examples
androidbroadcastreceiversharedpreferencescountdowntimerserializable

CountDownTime closes after a new Acitivity - How to fix this?


  1. I'm writing an application which uses a CountDownTimer. But I noticed that when it's turned on and after change menu(when I click back button) this timer is stopped.
  2. Furthermore, when I click a button which save my data into SharedPreferences it refreshes my activity but when I click a back button it goes back as many times as I clicked save Button.

ad.1 I read that I could use a BroadcastReceiver or Serializable - but I don't know how exactly use this in my code. Could someone help me to resolve this situation?

Below, I show my code: (var PPowtorzenia - it's variable which save my info about repeats and save this into SharedPref.)

public class biceps_cw1 extends ActionBarActivity { public static final String MMY_PREFS_NAME = "MMyPrefsFile"; EditText PPowtorzenia, PPowtorzenia1, PPowtorzenia2, PPowtorzenia00,PPowtorzenia11; EditText PPowtorzenia22, PPowtorzenia3, PPowtorzenia33; Button btnStart, btnStop; TextView textViewTime;

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

    btnStart = (Button) findViewById(R.id.btnStart);
    btnStop = (Button) findViewById(R.id.btnStop);
    textViewTime = (TextView) findViewById(R.id.textViewTime);

    textViewTime.setText("00:01:30");

    final CounterClass timer = new CounterClass(90000, 1000); //9000 - ilosc milisekund(1m30s)
    btnStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            timer.start();
        }
    });

    btnStop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            timer.cancel();
        }
    });

    PPowtorzenia = (EditText) findViewById(R.id.mmessage);
    PPowtorzenia00 = (EditText) findViewById(R.id.mmessage00);
    PPowtorzenia1 = (EditText) findViewById(R.id.mmessage1);
    PPowtorzenia2 = (EditText) findViewById(R.id.mmessage2);
    PPowtorzenia3 = (EditText) findViewById(R.id.mmessage3);
    PPowtorzenia11 = (EditText) findViewById(R.id.mmessage11);
    PPowtorzenia22 = (EditText) findViewById(R.id.mmessage22);
    PPowtorzenia33 = (EditText) findViewById(R.id.mmessage33);



    SharedPreferences ssharedPreferences = getApplication().getSharedPreferences(MMY_PREFS_NAME, MODE_PRIVATE);
    SharedPreferences ssharedPreferences1 = getApplication().getSharedPreferences(MMY_PREFS_NAME, MODE_PRIVATE);
    SharedPreferences ssharedPreferences00 = getApplication().getSharedPreferences(MMY_PREFS_NAME, MODE_PRIVATE);
    SharedPreferences ssharedPreferences11 = getApplication().getSharedPreferences(MMY_PREFS_NAME, MODE_PRIVATE);
    //  SharedPreferences sharedPreferences2 = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    //  SharedPreferences sharedPreferences3 = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    //  SharedPreferences sharedPreferences22 = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    //  SharedPreferences sharedPreferences33 = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);

    String nnumberValue = ssharedPreferences.getString("nnumberValue", "");
    String nnumberValue1 = ssharedPreferences1.getString("nnumberValue1", "");
    String nnumberValue00 = ssharedPreferences00.getString("nnumberValue00", "");
    String nnumberValue11 = ssharedPreferences11.getString("nnumberValue11", "");
    String nnumberValue2 = ssharedPreferences11.getString("nnumberValue2", "");
    String nnumberValue3 = ssharedPreferences11.getString("nnumberValue3", "");
    String nnumberValue22 = ssharedPreferences11.getString("nnumberValue22", "");
    String nnumberValue33 = ssharedPreferences11.getString("nnumberValue33", "");

    PPowtorzenia.setText( nnumberValue );
    PPowtorzenia1.setText( nnumberValue1 );
    PPowtorzenia00.setText( nnumberValue00 );
    PPowtorzenia11.setText( nnumberValue11 );
    PPowtorzenia2.setText( nnumberValue2 );
    PPowtorzenia3.setText( nnumberValue3 );
    PPowtorzenia22.setText( nnumberValue22 );
    PPowtorzenia33.setText( nnumberValue33 );



}

public class CounterClass extends CountDownTimer {

    public CounterClass(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onTick(long millisUntilFinished) {
        long millis = millisUntilFinished;
        String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
                TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
        System.out.println(hms);
        textViewTime.setText(hms);

    }

    @Override
    public void onFinish() {
        textViewTime.setText("Completed.");
    }
}

public void ssaveButton(View view) {
    Intent b = new Intent(this,biceps_cw1.class);
    String uuserNumber = PPowtorzenia.getText().toString();
    String uuserNumber1 = PPowtorzenia1.getText().toString();
    String uuserNumber00 = PPowtorzenia00.getText().toString();
    String uuserNumber11 = PPowtorzenia11.getText().toString();
    String uuserNumber2 = PPowtorzenia2.getText().toString();
    String uuserNumber3 = PPowtorzenia3.getText().toString();
    String uuserNumber22 = PPowtorzenia22.getText().toString();
    String uuserNumber33 = PPowtorzenia33.getText().toString();
    b.putExtra("PPowtorzenia",uuserNumber);
    b.putExtra("PPowtorzenia1",uuserNumber1);
    b.putExtra("PPowtorzenia00",uuserNumber00);
    b.putExtra("PPowtorzenia11",uuserNumber11);
    b.putExtra("PPowtorzenia2",uuserNumber2);
    b.putExtra("PPowtorzenia22",uuserNumber22);
    b.putExtra("PPowtorzenia3",uuserNumber3);
    b.putExtra("PPowtorzenia33",uuserNumber33);

    if(uuserNumber.equals("")){
        Toast.makeText(this,"Please enter a number of your series", Toast.LENGTH_SHORT).show();
        return;
    }
    SharedPreferences ssharedPreferences = getApplication().getSharedPreferences(MMY_PREFS_NAME, MODE_PRIVATE);
    //  SharedPreferences sharedPreferences1 = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    //  SharedPreferences sharedPreferences00 = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    //  SharedPreferences sharedPreferences11 = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    // SharedPreferences sharedPreferences2 = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    //SharedPreferences sharedPreferences22 = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    //SharedPreferences sharedPreferences3 = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    // SharedPreferences sharedPreferences33 = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    SharedPreferences.Editor editorb = ssharedPreferences.edit();

    editorb.putString("nnumberValue", PPowtorzenia.getText().toString());
    editorb.putString("nnumberValue1", PPowtorzenia1.getText().toString());
    editorb.putString("nnumberValue00", PPowtorzenia00.getText().toString());
    editorb.putString("nnumberValue11", PPowtorzenia11.getText().toString());
    editorb.putString("nnumberValue22", PPowtorzenia22.getText().toString());
    editorb.putString("nnumberValue33", PPowtorzenia33.getText().toString());
    editorb.putString("nnumberValue2", PPowtorzenia2.getText().toString());
    editorb.putString("nnumberValue3", PPowtorzenia3.getText().toString());
    editorb.commit();

    startActivity(b);
}

}


Solution

  • Not pretty sure about your purpose. Do you mean you want to keep a countdown timer alive no matter whether the activity is shown on UI? If so, it is not advised to keep timer in activity. A better way is to implement that in background component, such as a service or a thread. In this way, the timer is irrelevant to activity lifecycle. The work of activity is only to display the result.