0

SMSをNumberに送信するAPPを開発しています。SMSが非同期タスクの実行に失敗した場合は、インターバル後にSMSを再送信するためにチェックしますが、ここでの非同期タスクが私のコードであることがわからないため、すべての作業が無駄になります。

ASYNCクラス

        class checkList extends AsyncTask<String, Void, Void> {
        public Void doInBackground(String... p) {
          while (true) {
                already_running_async=true;
              sms.sendTextMessage(phone_nr, null, "SmS Sending", sentPI, null);

              try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
              if (isCancelled()) break;

          }
        return null;
        }
        };

SMS送信コードとエラー処理

        bol=false;
    already_running_async=false;
    check=false;

sms = SmsManager.getDefault();
        if(!phone_nr.equals(""))
            sms.sendTextMessage(phone_nr, null,"Sms body" , sentPI, null); 
        sendBroadcastReceiver = new BroadcastReceiver(){
         @Override
            public void onReceive(Context context, Intent intent) {
                switch (getResultCode())
                {
                   case Activity.RESULT_OK:
                       //sms sent if bol true cancel the Asynctask :)
                    if(bol){
                    new checkList().cancel(true);}
                    break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        if(already_running_async==false){
                        new checkList().execute();
                        bol=true;}
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        if(already_running_async==false){
                        new checkList().execute();
                        bol=true;}
                        break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        if(already_running_async==false){
                        new checkList().execute();
                        bol=true;}
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        if(already_running_async==false){
                        new checkList().execute();
                        bol=true;}
                        break;
                }

           }
        };
        registerReceiver(sendBroadcastReceiver , new IntentFilter(SENT));

問題: タスクは開始しますが、タスクは生きたままで、10秒後にSMSを繰り返し送信します私もキャンセルを入れましたが、SMSが正常に送信された後asyntaskはキャンセルされません

この問題のために私が夜寝ていないのを手伝ってください:(

よろしく

4

1 に答える 1

0

この場合、すぐにキャンセルされる新しい非同期タスクが作成されます。

case Activity.RESULT_OK:
    //sms sent if bol true cancel the Asynctask :)
    if(bol){
        new checkList().cancel(true);
    }
    break;

AsyncTaskをキャンセルするには、次のような変数に格納する必要があります。

checkList smsTask = new checkList();
smsTask.execute();

// Other app logic

// Replacing the internal portion of that case is the new cancel code
if (bol) {
    smsTask.cancel(true);
}
于 2012-08-09T12:28:12.137 に答える