微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 测量短信发送速度

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

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

这是我写的代码.

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

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

    long endTime = System.currentTimeMillis();

    long result = endTime - startTime;

结果是742毫秒,但我怀疑这是正确的.这意味着每条SMS只需要74毫秒.

最佳答案
sendTextMessage()方法为其第四个参数采用PendingIntent,它将在发送消息时触发.我们可以将当前系统时间附加到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();
    }
};

我们需要在发送消息之前注册此Receiver.在活动或服务中:

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

在发送我们的消息时,我们将PendingIntent构造权限“塞进”到sendTextMessage()调用中,因此我们不会在抓取当前时间和实际进行调用之间无意中引入任何不必要的延迟.

SmsManager sm = SmsManager.getDefault();
sm.sendTextMessage("1234567890","Testing...",PendingIntent.getbroadcast(this,new Intent("SMS_SENT")
                                                  .putExtra("sent_time",System.currentTimeMillis()),0),null);

如果需要,可以多次运行,并从结果中得出平均值.如果这样做,请务必正确处理PendingIntents,以确保为每个广播提供正确的发送时间.在给定的示例中,一种简单的方法是使用不同的请求代码 – getbroadcast()中的第二个参数 – 用于每个调用.

建议您在完成后取消注册Receiver,以免在日志中收到有关泄漏的Receiver的恶意消息.

unregisterReceiver(smsSendReceiver);

原文地址:https://www.jb51.cc/android/430028.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐