How to stop a timer after certain number of times

后端 未结 3 777
醉话见心
醉话见心 2021-01-12 04:06

Trying to use a Timer to do run this 4 times with intervals of 10 seconds each.

I have tried stopping it with a loop, but it keeps crashing. Have tried

相关标签:
3条回答
  • 2021-01-12 04:29

    Why not use an AsyncTask and just have it Thread.sleep(10000) and the publishProgress in a while loop? Here is what it would look like:

    new AsyncTask<Void, Void, Void>() {
    
            @Override
            protected Void doInBackground(Void... params) {
    
                int i = 0;
                while(i < 4) {
                    Thread.sleep(10000);
                    //Publish because onProgressUpdate runs on the UIThread
                    publishProgress();
                    i++;
                }
    
                // TODO Auto-generated method stub
                return null;
            }
            @Override
            protected void onProgressUpdate(Void... values) {
                super.onProgressUpdate(values);
                //This is run on the UIThread and will actually Toast... Or update a View if you need it to!
                Toast.makeText(MainActivity.this, "test", Toast.LENGTH_SHORT).show();
            }
    
        }.execute();
    

    Also as a side note, for longer term repetitive tasks, consider using AlarmManager...

    0 讨论(0)
  • 2021-01-12 04:41
    for(int i = 0 ;i<4 ; i++){
        Runnable  runnableforadd ;
        Handler handlerforadd ;
        handlerforadd = new Handler();
        runnableforadd  = new Runnable() {
            @Override
            public void run() {
              //Your Code Here
                handlerforadd.postDelayed(runnableforadd, 10000);                         } 
        };
        handlerforadd.postDelayed(runnableforadd, i);
    
    }
    
    0 讨论(0)
  • 2021-01-12 04:50
    private final static int DELAY = 10000;
    private final Handler handler = new Handler();
    private final Timer timer = new Timer();
    private final TimerTask task = new TimerTask() {
        private int counter = 0;
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    Toast.makeText(MainActivity.this, "test", Toast.LENGTH_SHORT).show();
                }
            });
            if(++counter == 4) {
                timer.cancel();
            }
        }
    };
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        timer.schedule(task, DELAY, DELAY);
    }
    
    0 讨论(0)
提交回复
热议问题