java - Android线程可运行性能

标签 java android multithreading runnable executorservice

我想知道启动可运行对象的两种不同方法的性能和 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 使用率是否正确?有没有更有效/更好的方法来完成这项任务?

最佳答案

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

关于java - Android线程可运行性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36395440/

相关文章:

c# - 在 Entity Framework 6 中使用来自多个线程的单个上下文

c++ - 分离线程中的竞争条件

java - 如果 BeanIO 中的某些记录发生异常,则继续解析记录

Eclipse 上的 Java 包名称编译问题

android - 如何支持所有安卓屏幕尺寸?

c# - 尝试打开 Webview 时崩溃 - Xamarin.Forms.Platform.Android.WebViewRender+WebClient

C linux pthread线程优先级

java - 在同一 Maven 模块中的不同插件之间共享通用配置

java - Spring任务执行器和调度器

java - 文档元素后的 Android java XML 垃圾