0

我正在运行一个线程,它在 textView.EG:30,29,28,27... 中显示 30 秒...等到 0 秒。所以当它达到 0 秒时,一条消息将发送到带有定义消息的定义数字.

我的问题是,即使我在两者之间停止线程并且它显示它已经停止;仍然是方法sendTextMessageAlert(); 以某种方式调用并发送短信。在我的编码中执行以下操作:

 uiPost = new Handler();
        running = true;
        timerThread=new Thread(new Runnable() {
            int i;
            @Override
            public void run() {
                // TODO Auto-generated method stub
                for( i=30;i>=0;i--)
                {
                    if(running)
                    {
                          uiPost.post(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                setTimerText(i);
                            }
                        });
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    }else
                    {
                        timerThread.stop();

                        end();
                        //Intent iii=new Intent(Alert.this,FearAlert.class);
                        //startActivity(iii);
                    }
                }

            }//run end
        });
        timerThread.start();



        b1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                //timerThread.stop();
                running=false;
                 // endAlert();
                  Toast.makeText(getApplicationContext(), "By Button,Monitoring Stopped", 0).show();

            }
        });
}   
public void end(){
    vibrator.cancel();
    this.locationManager.removeUpdates(this);
    if(wakeLock.isHeld())
        wakeLock.release();

    finish();
}
     private void setTimerText(int i)
  {

     ((TextView)findViewById(R.id.TextView03)).setText(String.valueOf(i) + "s");

        if(i==0)
        {
            running=false;
            sendTextMessageAlert();
            vibrator.cancel();
            this.locationManager.removeUpdates(this);
            if(wakeLock.isHeld())
                wakeLock.release();
            finish();

        }


  }



private void sendTextMessageAlert() {
    // TODO Auto-generated method stub
    SendSMS task=new SendSMS(); 
    task.startSMS();
}

class SendSMS 
{
    SharedPreferences myPrefs = getSharedPreferences("FearAlert", 1);
    String contactNumber1 = myPrefs.getString("contactNumber1", number);

public void startSMS() {
    // TODO Auto-generated method stub

    SmsManager.getDefault().sendTextMessage(contactNumber1,
             null, 
        getSharedPreferences("FearAlert", 1).getString("message",getString( R.string.default_emergency_message)+sss), 
        null, null);        
}

M 使用布尔运行来检查和停止线程。请帮助我,为什么当我按下按钮 B1时仍然调用 sendTextMessageAlert?任何解决方案..提前谢谢...

4

1 回答 1

1

而不是 Thread 用于CountDownTimer执行此任务,因为不推荐使用stop()方法,Thread并且您不应该停止线程。

android.os.CountDownTimer.CountDownTimer(long millisInFuture, long countDownInterval)

CountDownTimer也有cancel()取消定时器的方法

它也有类似的方法public void onTick(long millisUntilFinished)public void onFinish()这将有助于您执行任何您想要的任务

于 2013-02-26T10:41:26.290 回答