我需要测量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;
result
是742毫秒,但我怀疑这是正确的。这意味着每条SMS只需74毫秒。
答案 0 :(得分:2)
sendTextMessage()
方法将第四个参数a PendingIntent
用于在发送消息时触发。我们可以将当前系统时间作为额外添加到Intent
的{{1}},当它触发时,检索该额外内容并将其与当前系统时间进行比较。这将为我们提供一个衡量实际发送消息所需时间的方法。
我们将使用PendingIntent
来处理BroadcastReceiver
,只需在其PendingIntent
中检索额外发送时间,并计算从当前时间开始的经过时间。
onReceive()
我们需要在发送消息之前注册此Receiver。在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();
}
};
或Activity
:
Service
在发送我们的消息时,我们会将registerReceiver(smsSendReceiver, new IntentFilter("SMS_SENT"));
构造权限“填入”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);
,以确保为每次广播提供正确的发送时间。在给定的示例中,一种简单的方法是使用不同的请求代码 - PendingIntent
中的第二个参数 - 用于每个调用。
建议您在完成后取消注册Receiver,以免在日志中收到有关泄漏的Receiver的恶意消息。
getBroadcast()
答案 1 :(得分:1)
设置广播接收器并在获得SMS SENT消息后更新时间。然后计算每个短信发送时间。链接可以帮助Android SMS Delivery Intent always return -1