Reputation: 21
My code needs to generate a random character from A to Z, using a new thread, every one second and display the output in the logcat. Right now I am able generate a new character using a new thread and display it in the logcat. However, my output displays too quickly. It's generating like 20 new threads in one second. I used new Timer().schedule(new TimerTask() and an interval of 10000. Can someone please help me fix my code to display 1 new thread display every 1 second?
private void generateRandomAlphabet() {
final Handler handler = new Handler();
//creates new thread every one second
new Timer().schedule(new TimerTask(){
@Override
public void run(){
//loop to create generate new thread in logcat until stop button is pressed
while (running == true){
//generate a random character
Random rand = new Random();
final char alphabet = alphabets.charAt(rand.nextInt(26));
Log.d("RandomCharacter Service", "Thread ID is:" + Thread.currentThread().getId() + " , Random Character is: " + alphabet);
handler.post(new Runnable() {
@Override
public void run() {
//display random character in logcat
((TextView) findViewById(R.id.textView)).setText("Random Number Service Home");
}
});
}
}
//delay after start button is pressed is 0, interval between each thread is 10,000 ms
}, 0,10000);
}
@Override
public void onClick(View v){
//generate new thread once button is clicked
if(v.getId() == R.id.startService){
running = true;
Log.d("LogCat", "Service Started");
generateRandomAlphabet();
}
//stop generating threads once button is clicked
if(v.getId() == R.id.stopService){
Log.d("LogCat", "Service Stopped");
running = false;
}
}
}
Upvotes: 0
Views: 162
Reputation: 680
I haven't tested the code but you could try this
Handler handler = new Handler();
Runnable runnable;
int delay = 1000;
@Override
public void onClick(View v){
if(v.getId() == R.id.startService){
handler.postDelayed( runnable = new Runnable() {
public void run() {
Random rand = new Random();
final char alphabet = alphabets.charAt(rand.nextInt(26));
Log.d("RandomCharacter Service", "Random Character is:" + alphabet);
handler.postDelayed(runnable, delay);
}
}, delay);
}
if(v.getId() == R.id.stopService){
handler.removeCallbacks(runnable);
}
}
}
Upvotes: 2