2012-07-15 23 views
6

Timer का उपयोग करने की कोशिश करने के लिए प्रत्येक 4 बार प्रत्येक 10 सेकंड के अंतराल के साथ चलाने के लिए।कुछ समय के बाद टाइमर को कैसे रोकें

मैंने इसे लूप के साथ रोकने की कोशिश की है, लेकिन यह क्रैश हो रहा है। तीन पैरामीटर के साथ schedule() का उपयोग करने का प्रयास किया है, लेकिन मुझे नहीं पता था कि काउंटर वैरिएबल को कहां कार्यान्वित किया जाए। कोई विचार?

final Handler handler = new Handler(); 
Timer timer2 = new Timer(); 

TimerTask testing = new TimerTask() { 
    public void run() { 
     handler.post(new Runnable() { 
      public void run() { 
       Toast.makeText(MainActivity.this, "test", 
        Toast.LENGTH_SHORT).show(); 

      } 
     }); 
    } 
}; 

int DELAY = 10000; 
for (int i = 0; i != 2 ;i++) { 
    timer2.schedule(testing, DELAY); 
    timer2.cancel(); 
    timer2.purge(); 
} 

उत्तर

12
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

धन्यवाद, इस सवाल का जवाब सबसे अधिक उपयुक्त बनाया – jimmyC

+2

कोई समस्या नहीं है। फिर इसे सही उत्तर के रूप में चिह्नित करें :) – Y2i

2

एक AsyncTask का प्रयोग क्यों नहीं और Thread.Sleep (10000) और थोड़ी देर के पाश में publishProgress बस है? यहां बताया गया है कि यह कैसा दिखेगा है:

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(); 

इसके अलावा एक तरफ ध्यान दें, लंबी अवधि के दोहराए जाने वाले कार्यों के लिए के रूप में, AlarmManager उपयोग करने पर विचार ...

1
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); 

} 
संबंधित मुद्दे