设置CountDownTimer以运行onDestroy()的正确方法是什么?

问题描述 投票:0回答:1

我正在尝试创建一个计时器,一旦onDestroy()被触发就会在后台启动,一旦计时器达到6小时,SharedPreferences将用于在应用程序中进行更改。

我想知道......为CountDownTimer设置onDestroy()或类似的东西的正确方法是什么。

如果需要,我会回答任何问题。谢谢。

java android android-studio sharedpreferences countdowntimer
1个回答
1
投票

大约一个星期后,一个工作的答案出现了。这个答案包括与如何运行服务有关的内容。在这种情况下,我正在建立一个CountDownTimer服务。

AndroidManifest.xml中

<service android:name=".TimeService"/>

main activity.Java

import android.content.Intent;
import android.support.v4.content.ContextCompat;

public class MainActivity extends AppCompatActivity {
       Intent i;

       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           i = new Intent(this, TimeService.class);

           stopService(i); //To stop the service the next time the app is launched.
       }

       @Override
       protected void onDestroy() {
           launchService(); //Launches the service once when app shuts down.
           super.onDestroy();
       }

       public void launchService() { //How to launch the service, depending the phone's API.
            if(Build.VERSION.SDK_INT >= 26) {
                 startForegroundService(new Intent(this, TimeService.class));
            }
            else{
                Intent i;
                i = new Intent(this, TimeService.class);
                ContextCompat.startForegroundService(this, i);
            }
       }
}

time service.Java

import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.CountDownTimer;
import android.os.IBinder;
import android.support.annotation.Nullable;

public class TimeService extends Service {

   CountDownTimer cdt = null;
   private SharedPreferences pref;
   //Things you want SharedPreferences to change.
   Intent i;

   @Override
   public void onCreate() {
       i = new Intent(this, TimeService.class);
       startService(i);
       pref = this.getSharedPreferences("myAppPref", MODE_PRIVATE);
       cdt = new CountDownTimer(3600000, 1000) { //One hour timer with one second interval.

           @Override
           public void onTick(long millisUntilFinished) {

           }

           @Override
           public void onFinish() {
                //Whatever you need SharedPreferences to change here.
           }
       };
       cdt.start();
   }

   @Nullable
   @Override
   public IBinder onBind(Intent intent) {
       return null;
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.