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 -~----------~----~----~----~------~----~------~--~---

