我需要测量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上,当它触发时,检索该额外内容并将其与当前系统时间进行比较.这将为我们提供一个体面的衡量实际发送消息所需的时间.
原文链接:https://www.f2er.com/android/430028.html我们将使用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);