Comment tuer un thread et un gestionnaire avant d'aller à de nouvelles activités

Salut à tous - ce code peut être un peu brouillon dans la façon dont je suis en train de nettoyer le gestionnaire comme j'ai essayé de traquer où l'incident se produit...

J'ai une boîte de dialogue de l'activité qui est en montrant une entrée de mot de passe avec une barre de progression animée par un fil et un gestionnaire...

Il semble que lorsque que j'essaie pour voir si la barre de progression est fait, et en essayant de tuer le fil, la façon dont je le fais, c'est gâcher quelque chose quand j'essaie d'aller vers une nouvelle activité - c'est à dire dans une manière d'appeler une fonction et ne pas avoir à retourner à ou quelque chose...

public class RMO_Dialog extends Activity {
private ProgressBar progbar;
private Button dialogOK;
private EditText dialogPass;
private SharedPreferences prefs;
private String pass;
private int increment=10;
private Thread background;
private Boolean commCalled=false;
public void callCommunications(){
progbar.setVisibility(0);
progbar.setProgress(0);
background.stop();
Toast.makeText(getApplicationContext(), "Call communication should happen once.", Toast.LENGTH_LONG).show();
//     Intent i = new Intent();
//     i.setClass(RMO_Dialog.this, RMO_Comm.class);
//     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//     startActivity(i);
//         finish();
}
public void buzzUser(){
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
int dot = 200;
int dash = 500;
int short_gap = 200;
int medium_gap = 500;
int long_gap = 1000;
long[] pattern = {0,dot, short_gap, dot, short_gap, dot, medium_gap, dash, short_gap, dash, short_gap, dash, medium_gap, dot, short_gap, 
dot, short_gap, dot, long_gap};
v.vibrate(pattern, -1);
}
public void killCountdown(){
progbar.setVisibility(0);
progbar.setProgress(0);
background.stop();
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dialogpassword);
buzzUser();
prefs = this.getSharedPreferences("RMO", MODE_WORLD_READABLE);
pass = prefs.getString("password", "");
dialogOK = (Button) findViewById(R.id.dialogOK);
dialogPass = (EditText) findViewById(R.id.dialogPass);
progbar = (ProgressBar) findViewById(R.id.progress);
progbar.setProgress(0);
background = new Thread(new Runnable(){
@Override
public void run() {
try{
while(progbar.getProgress()<=progbar.getMax()){
Thread.sleep(300);
progressHandler.sendMessage(progressHandler.obtainMessage());
}
}catch(java.lang.InterruptedException e){
Toast.makeText(getApplicationContext(), "Error thrown.", Toast.LENGTH_LONG).show();
}
}
});
background.start();
dialogOK.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(dialogPass.getText().toString().equals(pass.toString())){
killCountdown();
Toast.makeText(getApplicationContext(), "Guardian Angel next alert has been disengaged.", Toast.LENGTH_LONG).show();
Intent intent = new Intent();
intent.setClass(RMO_Dialog.this, RMO.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}else{
callCommunications();
}
}
});
}
Handler progressHandler = new Handler(){
public void handleMessage(Message msg){
progbar.incrementProgressBy(increment);
if(progbar.getProgress()==progbar.getMax()){
Toast.makeText(getApplicationContext(), "commcalled: "+ commCalled, Toast.LENGTH_LONG).show();
if(commCalled==false){
commCalled=true;
callCommunications();
}
}
}
};
}
J'ai corrigé votre mise en forme un peu, n'oubliez pas de sélectionner votre code et cliquez sur le mise en forme du code bouton (101010)... vous pouvez également formater votre code une fois que vous soumettez votre question en cliquant sur modifier au-dessous de la question.

OriginalL'auteur grimmwerks | 2010-09-12