Android线程可运行性能

2024-04-06

我想知道两种不同的启动可运行方法的性能和 cpu/ram 要求

我有一些代码每 10 毫秒收集一次传感器数据,并将这些值插入到后台线程上的数据库中(使用单线程执行器)。 Executor服务创建如下:

executor = Executors.newSingleThreadExecutor();

一种方法是......

public void onSensorChanged(SensorEvent event) {
    //get sensor values

    //insert into database
    executor.execute(new Runnable(){
        //database insert code here
    });
}

我在教程中经常看到这种方法,但因为我每 10 毫秒执行一次,所以感觉资源密集型,因为每次检测到传感器值变化时我都会创建一个新对象。这个新对象是否每 10 毫秒就被覆盖一次?或者随着新对象的创建,它是否会占用越来越多的 RAM?

此后我重构了我的代码,使其看起来更像这样:

executor = Executors.newSingleThreadExecutor();
myRunnable = new MyRunnable();

class MyRunnable implements Runnable {
    public void run() {
        //database insert code here
    }
}

public void onSensorChanged(SensorEvent event) {
    //get sensor values

    //insert into database
    executor.execute(myRunnable);
}

我的想法是,我只实例化一个对象一次,而不是每次传感器发生变化时都实例化一次。我认为这比以前的方法具有更低的 RAM 使用率,这是正确的吗?有没有更有效/更好的方法来完成这项任务?


创造新Runnable每 10 毫秒实例一次肯定会导致垃圾收集器更频繁地启动,并可能影响您的应用程序性能。我认为你的第二种方法要好得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android线程可运行性能 的相关文章

随机推荐

  • 模板函数中的输出向量

    这一段代码报错 template
  • 来自 Unity 配置文件的 RegisterType

    我正在从 Prism 4 迁移到 Prism 7 1 我似乎找不到已从最新 Prism 版本中删除的ConfigureContainer 方法 过去 我曾使用这种方法从文件系统加载Unity配置 对于最新版本的 Prism 库 这似乎是不可
  • isdigit 无法正常工作

    我试图通过迭代整个字符串并输出整数来测试字符串是否包含整数 我的方法涉及将字符串转换为 c string atoic 字符串 然后使用测试它是否是整数isdigit功能 由于某种未知的原因 isdigit尽管函数遇到整数 但它返回 fals
  • 如何选择要在 Ruby 中动态包含的模块版本?

    我正在编写一个小型 Rub y 命令行应用程序 它使用fileutils来自文件操作的标准库 根据用户调用应用程序的方式 我想包括FileUtils FileUtils DryRun or FileUtils Verbose Since i
  • ggplot2:在右侧为一个变量创建第二个 y 轴

    我有一个数据框 在同一时间范围内包含 3 个不同的变量 前两个变量具有相同的比例 股票指数值 可以用 y 轴来说明 第三个变量是利率 范围仅为 0 到 7 因此我专注于在图的右侧创建一个额外的 y 轴来说明它 但经过两天的尝试和失败后 我在
  • 使用powershell获取csv文件中的特定单元格值

    我是 powershell 的新手 不经常使用它 我需要使用 powershell 从 csv 文件输出单元格 A5 的值 我的文件 col1 col2 col3 col4 1002 1005 1006 1007 需要 A1 单元格中的值
  • 无法使用 getDeclaredFields() 检索 Scala 类的字段

    我正在尝试将 Java 库 JOhm 与 Scala 一起使用 并注意到当该库尝试使用以下内容读取我的 Scala 类的字段时它会失败model getClass getDeclaredFields 然后我决定尝试在 Scala 解释器中用
  • 如何在输入按钮中的访问键下划线

    我有一个按钮 我想在访问密钥字母下划线 u u 不起作用 并且C 818 C 改变字体 应该是verdana
  • 带有自定义参数的 Html.DropDownListFor()

    我想在 HTML 帮助程序中添加扩展方法来生成这样的选择和选项
  • 如何使用默认集合和数据创建 Mongo Docker 镜像?

    我需要这里的支持来构建我自己的 mongo docker 镜像 我有一个脚本列表 用于创建数据并将其插入 MongoDB 这些脚本应在我的 Dockerfile 中调用 以提供具有默认集合和数据的 docker 映像 这是我的 Docker
  • 具有依赖预设参数的函数

    请考虑简单的功能 def fun x y param1 10 param2 param1 3 do something Where param1 and param2不应是必需的 但可以由用户设置 如果param2未设置 值取决于param
  • EaselJS - 检测碰撞的最佳方法

    我正在尝试为我的 easelJS 小应用程序找到一种碰撞检测的好方法 我刚刚使用 createjs Shape 创建了 2 个矩形 但是创建一个矩形形状后 API 不让我知道矩形的宽度和高度 我不知道为什么 EaselJS Shape 有一
  • 使用 CSS 动态清除浮动

    我正在尝试用 CSS 创建一个 3 列的博客布局 对于每个新帖子 都会在容器 div 内动态添加一个新的 div 但是 由于我无法手动放置清除元素 因此我在清除浮动时遇到了麻烦 现在看起来是这样的 http jsfiddle net DZA
  • 如何在 Spring Boot 中从 RESTful 控制器返回 HTML 页面?

    我想从控制器返回一个简单的 HTML 页面 但我只得到文件的名称而不是其内容 为什么 这是我的控制器代码 RestController public class HomeController RequestMapping public St
  • 如何使用 git 撤消推送的提交?

    我在远程存储库中有一个项目 与本地存储库 开发 和服务器存储库 产品 同步 我一直在进行一些已提交的更改 这些更改已推送到远程并从服务器中拉出 现在 我想撤消这些更改 所以我可以git checkout到更改之前的提交并提交新的更改 但我猜
  • 按 ProductFlavor 和 buildType 划分的 Gradle SourceSets

    EDIT口味和路径 目前我有 sourceSets whenObjectAdded sourceSet gt def sourceData rootProject ext sourceSet name sourceSet java srcD
  • ASP.NET身份重置密码

    如何在新的 ASP NET Identity 系统中获取用户的密码 或者在不知道当前密码的情况下如何重置 用户忘记密码 或者在不知道当前密码的情况下如何重置 用户忘记密码 如果您想使用 UserManager 更改密码 但不想提供用户的当前
  • Leafletjs GeoJSON 层不适用于来自自然地球的地图数据

    我正在使用 leafletjs 使用 OSM 瓷砖绘制地理地图 我使用以下 GeoJSON 作为地图层http code highcharts com mapdata 1 0 0 custom world js http code high
  • 使用 Javamail 访问 Microsoft Exchange 邮箱(IMAP、MS Exchange)

    我需要通过 IMAPS JavaMail 连接到 Microsoft Exchange Server 首先 我得到了 A1 NO AUTHENTICATE failed javax mail AuthenticationFailedExce
  • Android线程可运行性能

    我想知道两种不同的启动可运行方法的性能和 cpu ram 要求 我有一些代码每 10 毫秒收集一次传感器数据 并将这些值插入到后台线程上的数据库中 使用单线程执行器 Executor服务创建如下 executor Executors new