我需要测量Android设备中SMS的发送速度.我正在考虑以下方法.请告诉我它是否正确,或者是否有更好的解决方案.
计算发送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;
Run Code Online (Sandbox Code Playgroud)
这result是742毫秒,但我怀疑这是正确的.这意味着每条SMS只需要74毫秒.
该sendTextMessage()方法的第四个参数 aPendingIntent将在发送消息时触发。我们可以将当前系统时间作为额外附加到 for Intent,PendingIntent当它触发时,检索该额外时间并将其与当前系统时间进行比较。这将使我们能够准确地衡量实际发送消息所需的时间。
我们将使用 aBroadcastReceiver来处理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();
}
};
Run Code Online (Sandbox Code Playgroud)
我们需要在发送消息之前注册这个接收器。在Activity或中Service:
registerReceiver(smsSendReceiver, new IntentFilter("SMS_SENT"));
Run Code Online (Sandbox Code Playgroud)
在发送消息时,我们会将构造“塞进”PendingIntent调用中sendTextMessage(),这样我们就不会无意中在获取当前时间和实际进行调用之间引入任何不必要的延迟。
SmsManager sm = SmsManager.getDefault();
sm.sendTextMessage("1234567890",
null,
"Testing...",
PendingIntent.getBroadcast(this,
0,
new Intent("SMS_SENT")
.putExtra("sent_time",
System.currentTimeMillis()),
0),
null);
Run Code Online (Sandbox Code Playgroud)
如果需要,可以运行多次,并根据结果计算平均值。如果这样做,请务必适当处理PendingIntents,以确保为每个广播提供正确的发送时间。在给定的示例中,执行此操作的一个简单方法是getBroadcast()为每个调用使用不同的请求代码(第二个参数)。
建议您在使用完接收器后取消注册该接收器,以免您的日志中收到有关接收器泄露的令人讨厌的消息。
unregisterReceiver(smsSendReceiver);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |