Try to remove "synchronized" from stopThread() and startThread()

On Jul 17, 6:29 pm, Kevin Grant <[email protected]> wrote:
> I understand the concept of threads, and it almost seems like I
> understand how to implement them.  This code executes properly until I
> press the back button (to close), and then gives a "This application
> has stopped unexpectedly.  Please try again."  Well duh, I closed it!
>
> Heres the code Im using:
>
> (It is a slightly modified version of the example provided
> here:http://www.helloandroid.com/node/243
>
> using the modifications I found
> here:http://stackoverflow.com/questions/680180/where-to-stop-destroy-threa...
> )
>
> The import Pi class comes from this website, its just an arbitrary
> class that will perform a long calculation to show the example
>
> http://blog.taragana.com/index.php/archive/calculate-pi-to-arbitrary-...
>
> /*************************************************/
> package com.example;
>
> import com.example.Pi;
> import android.app.Activity;
> import android.app.ProgressDialog;
> import android.os.Bundle;
> import android.os.Handler;
> import android.os.Message;
> import android.view.View;
> import android.view.View.OnClickListener;
> import android.widget.Button;
> import android.widget.TextView;
>
> public class AndroidThreads extends Activity implements Runnable {
>
>     private String pi_string;
>     private TextView tv;
>     private ProgressDialog pd;
>     private volatile Thread runner;
>
>     @Override
>     public void onCreate(Bundle icicle) {
>         super.onCreate(icicle);
>         setContentView(R.layout.main);
>
>         mp = MediaPlayer.create(getBaseContext(),
> R.raw.camera_click); //this is using the slow.mp3 resource
>         tv = (TextView) this.findViewById(R.id.box);
>         tv.setText("Press submit to start calculation");
>
>                 Button submit = (Button) findViewById(R.id.submit_btn);
>         submit.setOnClickListener(new OnClickListener(){
>                 public void onClick(View v){
>                         startThread();
>                 }
>         });
>     }
>
>     public synchronized void startThread(){
>       if(runner == null){
>         pd = ProgressDialog.show(this, "Working..", "Calculating Pi",
> true, false);
>         runner = new Thread(this);
>         runner.start();
>       }
>     }
>
>     public synchronized void stopThread(){
>       if(runner != null){
>         Thread moribund = runner;
>         runner = null;
>         moribund.interrupt();
>       }
>     }
>
>     public void run(){
>           pi_string = Pi.computePi(800).toString();
>           handler.sendEmptyMessage(0);
>     }
>
>     private Handler handler = new Handler() {
>         @Override
>         public void handleMessage(Message msg) {
>             pd.dismiss();
>             tv.setText(pi_string);
>         }
>     };}
>
> /*************************************************/
>
> So like I said, this does everything I want it to do, except... it
> gives the crash error when I exit the program.
>
> *So what I need to know is why is it crashing, and how can I fix it?*
>
> It seems to me like the threads aren't all finishing properly, so I
> tried putting the stopThread() function into the onStop() and onDestroy
> () overrides, but that didn't seem to make a difference.  Appreciate
> any input!
>
> -kevin
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Beginners" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-beginners?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to