Wie tötet man einen thread und handler, bevor Sie gehen, um eine neue Aktivität

Hey alle - dieser code vielleicht ein bisschen chaotisch in der Weise, die ich bin versucht zu reinigen, bis der handler als ich versucht habe, auf die Spur, wo der crash passiert...

Ich habe einen dialog, Aktivität, zeigt eine Passwort-Eingabe mit einem progressbar animiert durch einen thread und handler...

Scheint es, dass, wenn ich versuche, um zu sehen, wenn die progressbar fertig ist, und versuchen zu töten, der thread, so wie ich das hier mache, ist etwas Durcheinander, wenn ich versuche zu gehen zu einer neuen Aktivität - das heißt in einer Weise, die eine Funktion aufrufen und nicht mit nichts zurück zu oder so...

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

            }
        }
    };
}
Ich fixierte Ihre Formatierung ein bisschen, vergessen Sie nicht, wählen Sie Ihren code ein und klicken Sie auf den code-Formatierung-Taste (101010)... Sie können auch formatieren Sie den code nach Absenden Ihrer Frage, indem Sie auf Bearbeiten unterhalb der Frage.

InformationsquelleAutor grimmwerks | 2010-09-12

Schreibe einen Kommentar