测量短信发送速度

5

我需要在Android设备上测量短信发送速度。我正在考虑以下方法。请告诉我是否正确,或者是否有更好的解决方案。

计算发送10条消息所花费的时间,并计算发送每条消息所花费的平均时间。但这里的速度量在哪里?字符数增加会增加发送时间吗?

这是我编写的代码。

    SmsManager smsManager = SmsManager.getDefault();
    long startTime = System.currentTimeMillis();

    smsManager.sendTextMessage("1234567890",null,text,null,null);
    smsManager.sendTextMessage("1234567890",null,text,null,null);
    smsManager.sendTextMessage("1234567890",null,text,null,null);
    smsManager.sendTextMessage("1234567890",null,text,null,null);
    smsManager.sendTextMessage("1234567890",null,text,null,null);
    smsManager.sendTextMessage("1234567890",null,text,null,null);
    smsManager.sendTextMessage("1234567890",null,text,null,null);
    smsManager.sendTextMessage("1234567890",null,text,null,null);
    smsManager.sendTextMessage("1234567890",null,text,null,null);

    long endTime = System.currentTimeMillis();

    long result = endTime - startTime;

结果显示742毫秒,但我怀疑这不是正确的结果。这意味着每条短信只需要74毫秒


只是出于好奇,74毫秒有什么问题吗?它太长了吗? - lelloman
当我尝试使用设备发送短信时,需要大约1.5秒钟才能发送。 - Mustafa Mohammadi
你假设这个调用是同步的,但我非常怀疑。最有可能的情况是74毫秒仅用于将短信排队到发送队列中,而不是实际与最近的基站建立无线电链接并发送消息。 - mach
2个回答

3
sendTextMessage()方法的第四个参数是一个PendingIntent,它将在短信发送时触发。我们可以将当前系统时间作为额外参数附加到那个Intent上,当它被触发后,获取该额外参数并将其与当前系统时间进行比较。这将为我们提供一个相当准确的测量短信发送所需的时间。
我们将使用一个BroadcastReceiver来处理PendingIntent,只需在其onReceive()中检索已发送时间的额外参数,并计算从当前时间开始的经过时间即可。
BroadcastReceiver smsSendReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        long sentTime = intent.getLongExtra("sent_time", 0);
        long elapsedTime = System.currentTimeMillis() - sentTime;
        Toast.makeText(context, elapsedTime + "ms", Toast.LENGTH_SHORT).show();
    }
};

在发送消息之前,我们需要在 ActivityService 中注册此接收器:

registerReceiver(smsSendReceiver, new IntentFilter("SMS_SENT"));

在发送我们的消息时,我们将会在sendTextMessage()调用中"夹杂"着PendingIntent的构建,这样我们不会无意间引入任何不必要的延迟,从而在获取当前时间和实际发起调用之间进行。
SmsManager sm = SmsManager.getDefault();
sm.sendTextMessage("1234567890",
                   null,
                   "Testing...",
                   PendingIntent.getBroadcast(this,
                                              0,
                                              new Intent("SMS_SENT")
                                                  .putExtra("sent_time",
                                                            System.currentTimeMillis()),
                                              0),
                   null);

如果需要,可以多次运行此操作,并从结果中得出平均值。如果这样做,请务必正确处理PendingIntent,以确保为每个广播传递正确的发送时间。在给定的示例中,一个简单的方法是为每个调用使用不同的请求代码——getBroadcast()中的第二个参数。
建议在完成使用后注销接收器,否则您可能会在日志中收到关于泄漏接收器的不良消息。
unregisterReceiver(smsSendReceiver);

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接