я получил ответы на некоторые вопросы, и пошла вперед и попытались следующее:все еще возникают проблемы окончания нити
01 import android.app.Activity;
02 import android.media.MediaPlayer;
03 import android.os.Bundle;
04 import android.os.Handler;
05 import android.os.Message;
06 import android.media.MediaPlayer;
07 import android.media.AudioManager;
08 import android.content.Context;
09 import java.lang.Runnable;
10
11 public class CanvasDrawingActivity extends Activity {
12
13 private static final int FIRE = 0;
14 private int initVolume = 0;
15 private Handler handler;
16 private MyCanvas v;
17 private MediaPlayer mp;
18 private AudioManager am;
19 private MyRunnable r;// this is our custom runnable!
20
21 @Override
22 public void onCreate(Bundle savedInstanceState) {
23 super.onCreate(savedInstanceState);
24
25 am = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
26
27 // this method gets the current volume setting for music
28 initVolume = am.getStreamVolume(AudioManager.STREAM_MUSIC);
29
30 // this method sets the volume for music | the 100 is the volume. you can put there either initVolume or whatever value you want
31 am.setStreamVolume(AudioManager.STREAM_MUSIC,100,AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
32
33 mp = MediaPlayer.create(this, R.raw.siren_1);
34
35 makeHandler();
36 v =new MyCanvas(this);
37 setContentView(v);
38 r = new MyRunnable();// this needs to create a new MyRunnable
39 new Thread(r).start();
40 mp.setLooping(true);
41 mp.start();
42 }
43 private void makeHandler()
44 {
45 handler = new Handler(){
46
47 @Override
48 public void handleMessage(Message msg) {
49 switch(msg.what)
50 {
51 case FIRE:
52 {
53 v.invalidate();
54 break;
55 }
56 }
57 }
58
59 };
60
61 }
62 private class MyRunnable extends Runnable {// you had this in the wrong spot...
63 private boolean doRun = true;
64
65 @Override
66 public void run(){
67 while(doRun)
68 handler.sendEmptyMessage(FIRE);
69 }
70 public void stopThread(){
71 doRun = false;
72 }
73 }
74 protected void onpause() {
75 super.onpause();
76 mp.stop();
77 r.stopThread();
78 finish();
79 }
80 protected void onfinish() {
81 mp.stop();
82 r.stopThread();
83 finish();
84 }
85
86 }
Я получаю сообщение об ошибке, что работоспособные не может быть суперклассом. В частности, что тип runnable не может быть суперклассом MyRunnable; суперкласс должен быть классом.
Затем в onpause и onfinish появляется сообщение об ошибке: Te метод stopThread не определен для типа runnable. Это происходит даже тогда, когда extends изменяется на инструменты.
Я также попытался:
01 Runnable MyRunnable = new Runnable(){
02
03
04 private boolean doRun = true;
05
06 @Override
07 public void run(){
08 while(doRun)
09 handler.sendEmptyMessage(FIRE);
10 }
11 public void stopThread(){
12 doRun = false;
13 }
14 }
Я попытался также:
private class MyRunnable implements Runnable \\etc
что проясняет работоспособный проблему, но вызывает мой
r = new MyRunnable();
и
r.stopThread();
быть ошибками, которые говорят еще: stopThread is undefined for the type runnable, and Type mismatch cannot convert from CanvasDrawingActivity.MyRunnable to Runnable.
Может кто-нибудь помочь мне здесь. Я чувствую, что это хороший вариант, чтобы закончить поток, но опять-таки, я получаю непроходимые ошибки ...
Вы уверены, что его onpause или [onPause()] (http://developer.android.com/reference/android/app/Activity.html#onPause()) также относятся к [this] (http: // stackoverflow.com/questions/1204012/why-isnt-the-thread-stopping) – Reno
По какой-то причине ему нравится делать эти строчные буквы. Это onPause(), но форматирование изменилось. – user571866