Android 线程可运行性能
Android thread runnable performance
我想知道 2 种不同的可运行程序启动方法的性能和 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 使用率是否正确?有没有更多的efficient/better方法来完成这个任务?
每 10 毫秒创建一个新的 Runnable
实例肯定会导致垃圾收集器更频繁地启动,并可能影响您的应用程序性能。我认为你的第二种方法要好得多。
我想知道 2 种不同的可运行程序启动方法的性能和 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 使用率是否正确?有没有更多的efficient/better方法来完成这个任务?
每 10 毫秒创建一个新的 Runnable
实例肯定会导致垃圾收集器更频繁地启动,并可能影响您的应用程序性能。我认为你的第二种方法要好得多。