ArrayList 清除问题

ArrayList clearing issue

我正在创建一个 android 发送短信的应用程序。我实际上对包含 PendingIntentsSentPenIntentsDelPenIntents)的 ArrayList 有疑问,其中包含发送操作的成功或失败。

    private Runnable seekSms = new Runnable() {
    @Override
    public void run() {
        try {
            if(phoneHasID) {
                try { 

                        ArrayList<PendingIntent> SentPenIntents = new ArrayList<>();
                        ArrayList<PendingIntent> DelPenIntents = new ArrayList<>();                      
                        String SENT_SMS_FLAG = "SENT_SMS";
                        String DELIVER_SMS_FLAG = "DELIVER_SMS";

                        Intent sentIn = new Intent(SENT_SMS_FLAG);
                        PendingIntent sentPIn = PendingIntent.getBroadcast(getApplicationContext().getApplicationContext(),0,sentIn,0);

                        Intent deliverIn = new Intent(DELIVER_SMS_FLAG);
                        PendingIntent deliverPIn = PendingIntent.getBroadcast(getApplicationContext().getApplicationContext(),0,deliverIn,0);

                        BroadcastReceiver sentReceiver = new BroadcastReceiver(){
                            @Override public void onReceive(Context c, Intent in) {
                                switch(getResultCode()){
                                    case Activity.RESULT_OK:
                                        System.out.println("successfully sent !!");
                                        break;
                                    default:
                                        System.out.println("sending failed !!");
                                        break;
                                }
                            }
                        };
                        BroadcastReceiver deliverReceiver = new BroadcastReceiver(){
                            @Override public void onReceive(Context c, Intent in) {
                                System.out.println("message received !!");

                            }
                        };
                        registerReceiver(sentReceiver, new IntentFilter(SENT_SMS_FLAG));
                        registerReceiver(deliverReceiver, new IntentFilter(DELIVER_SMS_FLAG));

                        SmsManager smsManager = SmsManager.getDefault();
                        ArrayList<String> smsParts = smsManager.divideMessage(sms);


                        for (int i=0; i < smsParts.size(); i++){
                            SentPenIntents.add(i, sentPIn);
                            DelPenIntents.add(i, deliverPIn);
                        }

                        smsManager.sendMultipartTextMessage(numero, null, smsParts, SentPenIntents, DelPenIntents);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        pauseSms.postDelayed(seekSms, delayCT * 1000);
    }
};

一切正常,第一次:在我的控制台中,我收到一条 3 条短信长度的消息:

09-29 15:57:56.137  15781-15781/? I/System.out﹕ successfully sent !!
09-29 15:57:56.652  15781-15781/? I/System.out﹕ successfully sent !!
09-29 15:57:57.051  15781-15781/? I/System.out﹕ successfully sent !!
09-29 15:57:58.753  15781-15781/? I/System.out﹕ message received !!
09-29 15:57:59.673  15781-15781/? I/System.out﹕ message received !!
09-29 15:58:16.272  15781-15781/? I/System.out﹕ message received !!

当应用程序开始发送第二条消息时,我为每个列表又收到了 3 条输出消息:

09-29 16:03:47.603  16011-16011/? I/System.out﹕ successfully sent !!
09-29 16:03:47.604  16011-16011/? I/System.out﹕ successfully sent !!
09-29 16:03:48.028  16011-16011/? I/System.out﹕ successfully sent !!
09-29 16:03:48.028  16011-16011/? I/System.out﹕ successfully sent !!
09-29 16:03:51.093  16011-16011/? I/System.out﹕ message received !!
09-29 16:03:51.095  16011-16011/? I/System.out﹕ message received !!
09-29 16:03:51.310  16011-16011/? I/System.out﹕ message received !!
09-29 16:03:51.310  16011-16011/? I/System.out﹕ message received !!
09-29 16:04:03.299  16011-16011/? I/System.out﹕ successfully sent !!
09-29 16:04:03.299  16011-16011/? I/System.out﹕ successfully sent !!
09-29 16:04:05.744  16011-16011/? I/System.out﹕ message received !!
09-29 16:04:05.744  16011-16011/? I/System.out﹕ message received !!

依此类推,列表堆叠。我可能在清除 ArrayList 时遇到问题,但我无法找出它是什么。

您永远不会从列表中删除内容。这就是它堆叠的原因。

尝试在收到送货确认后删除意向。

编辑 在进一步查看您的代码后,我看到您每次调用您的方法时都在注册接收者。这导致多个接收者拦截事件并仅打印一次消息。尝试只注册一次,看看会发生什么。

您可以通过在方法末尾调用 unregisterReceiver 轻松测试它。