Potongan kode ini berjalan dengan sempurna jika saya menulisnya dalam suatu aktivitas tetapi tidak berjalan dalam sebuah fragmen. Dan saya ingin menjalankannya di latar belakang setelah aplikasi dimatikan.

Ini adalah penghitung waktu mundur saya

 public void bonus(){
               
                    mEndTime = System.currentTimeMillis() + timeleftinmillis;
                    Log.i("timeadd", String.valueOf(mEndTime));
                        countDownTimer=new CountDownTimer(timeleftinmillis,1000){
                            @Override
                            public void onTick(long l) {
                                timeleftinmillis=l;
                                    updateTimer();
                            }

                            @Override
                            public void onFinish() {
                                mrunning=false;
                                updateButtons();
                            }
                        }.start();
                        mrunning=true;
                        bonusmoney.setText( String.valueOf(clickcount));
                        updateButtons();


    }

Di sinilah saya mengonversi waktu dalam menit dan detik

  public void updateTimer (){

        long min = (timeleftinmillis/1000) / 60;
        long sec = (timeleftinmillis/1000) % 60;
       
        String timeformat = String.format(Locale.getDefault(),"%02d:%02d",min,sec);
        timerbonusview.setText(timeformat);
    }

Ini adalah metode OnStart() saya

 @Override
public void onStart() {
    super.onStart();
    SharedPreferences prefs = getContext().getSharedPreferences("prefs", MODE_PRIVATE);
    timeleftinmillis = prefs.getLong("millisLeft", timeinmillis);
    mrunning = prefs.getBoolean("timerRunning", false);
    updateTimer();
    updateButtons();
   
    if (mrunning) {
        mEndTime = prefs.getLong("endTime", 0);
        Log.i("endtime", String.valueOf(mEndTime));
        timeleftinmillis = mEndTime - System.currentTimeMillis();
        Log.i("timeleft", String.valueOf(timeleftinmillis));
        if (timeleftinmillis < 0) {
            timeleftinmillis = 0;
            mrunning = false;
            Log.i("timebonus", "less than zero");
            updateTimer();
            updateButtons();
        } else {
             bonus();
        }
    }
}

Ini adalah metode onStop() saya

 @Override
public void onStop() {
    super.onStop();
    SharedPreferences prefs = getContext().getSharedPreferences("prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putLong("millisLeft", timeleftinmillis);
    editor.putBoolean("timerRunning", mrunning);
    editor.putLong("endTime", mEndTime);
    editor.apply();
    if (countDownTimer != null) {
        countDownTimer.cancel();
    }
}

tombol pembaruan di sini

private void updateButtons() {
    if (mrunning) {
        dailyearningsbtn.setVisibility(View.INVISIBLE);
    }else {
        dailyearningsbtn.setVisibility(View.VISIBLE);
    }
}
0
akash sharma 30 Juni 2020, 19:36

1 menjawab

Jawaban Terbaik

Untuk menjalankan tugas setelah aplikasi dimatikan, pertimbangkan untuk menggunakan layanan latar belakang di android

0
Filip Sollár 30 Juni 2020, 16:52