草庐IT

android - 测量短信发送速度

coder 2023-12-14 原文

我需要测量 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 毫秒。

最佳答案

sendTextMessage() 方法的第四个参数是 PendingIntent,它会在发送消息时触发。我们可以将当前系统时间作为附加项附加到 PendingIntentIntent 中,当它触发时,检索该附加项并将其与当前系统时间进行比较。这将使我们能够准确衡量实际发送消息所需的时间。

我们将使用 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。在 ActivityService 中:

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,以确保为每个广播提供正确的发送时间。在给定的示例中,一种简单的方法是为每次调用使用不同的请求代码 - getBroadcast() 中的第二个参数。

建议您在使用完 Receiver 后注销它,以免您在日志中收到关于 Receiver 泄露的恶意消息。

unregisterReceiver(smsSendReceiver);

关于android - 测量短信发送速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38761208/

有关android - 测量短信发送速度的更多相关文章

  1. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  2. ruby - 使用 Ruby 通过 Outlook 发送消息的最简单方法是什么? - 2

    我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=

  3. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  4. ruby - 是否可以在不实际发送或读取数据的情况下查明 ruby​​ 套接字是否处于 ESTABLISHED 或 CLOSE_WAIT 状态? - 2

    s=Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)s.connect(Socket.pack_sockaddr_in('port','hostname'))ssl=OpenSSL::SSL::SSLSocket.new(s,sslcert)ssl.connect从这里开始,如果ssl连接和底层套接字仍然是ESTABLISHED,或者它是否在默认值7200之后进入CLOSE_WAIT,我想检查一个线程几秒钟甚至更糟的是在实际上不需要.write()或.read()的情况下关闭。是用select()、IO.select()还是其他方法完成

  5. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  6. ruby - 如何理解 Ruby 中的发送者和接收者? - 2

    我很难理解Ruby中sender和receiver的实际含义。它们一般是什么意思?到目前为止,我只是将它们理解为方法调用和获取其返回值的调用。但是,我知道我的理解还远远不够。谁能给我一个Ruby中发送者和接收者的具体解释? 最佳答案 面向对象中的一个核心概念是消息传递和早期概念化,这在很大程度上借鉴了计算的Actor模型。艾伦·凯(AlanKay)创造了面向对象一词并发明了最早的OO语言之一SmallTalk,他拥有voicedregretatusingatermwhichputthefocusonobjectsinsteadofo

  7. ruby - 动态扩展现有方法或覆盖 ruby​​ 中的发送方法 - 2

    假设我们有A、B、C类。Adefself.inherited(sub)#metaprogramminggoeshere#takeclassthathasjustinheritedclassA#andforfooclassesinjectprepare_foo()as#firstlineofmethodthenrunrestofthecodeenddefprepare_foo#=>prepare_foo()neededhere#somecodeendendBprepare_foo()neededhere#somecodeendend如您所见,我正在尝试将foo_prepare()调用注入

  8. ruby-on-rails - 如何通过 POST 发送多个相同的键/参数? - 2

    如果我必须在一个HTTP请求中发送一堆post参数,所有这些参数都具有相同的名称,我该如何构建要发布的data对象?想象一个带有一些复选框的表单,它们都具有相同的name属性但具有不同的值(如果它们被选中):我想用ruby​​构建它(但它需要根据在表单上选择的内容动态创建):data={"color"=>"red","color"=>"green","color"=>"blue"}然后将数据发送到某个URL:Net::HTTP.post_form(url,data)我无法控制接收端,所以我必须发送它期望接收的参数。怎么办? 最佳答案

  9. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  10. java - Ruby 和 Java 的速度 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。在我在网上找到的每个基准测试中,Ruby似乎都很慢,比Java慢得多。Ruby的人只是说这无关紧要。您能举个例子说明RubyonRails(以及Ruby本身)的速度真的无关紧要吗?

随机推荐