мне интересно, о производительности и CPU/Требования к оперативной памяти для 2 различных методов, начиная runnablesAndroid нить работоспособной производительность
У меня есть некоторый код, который собирает данные датчиков каждые 10мс и вставляет значения в базу данных на фоне потока (используя один исполнитель потока). Исполнитель услуг создается следующим образом:
executor = Executors.newSingleThreadExecutor();
Один из способов сделать это было бы что-то вроде ...
public void onSensorChanged(SensorEvent event) {
//get sensor values
//insert into database
executor.execute(new Runnable(){
//database insert code here
});
}
Я вижу этот метод много в учебники, а потому, что я делаю это каждые 10 мс, он чувствует себя ресурсоемким, когда я создаю новый объект каждый раз, когда обнаруживается изменение значения датчика. Этот новый объект просто переопределяется каждые 10 мс? Или он занимает все большее количество ОЗУ при создании новых объектов?
Я так переработан мой код, чтобы выглядеть следующим образом:
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);
}
Мое мышление является то, что я создаю экземпляр только один объект один раз, вместо того, чтобы делать это каждый раз менять датчики. Правильно ли я полагаю, что это имеет более низкое использование ОЗУ, чем предыдущий метод? Есть ли более эффективный/лучший способ выполнить эту задачу?
Почему вы не можете просто создать очередь для обмена данными btw sensor и db writing thread? Таким образом, вы можете создать только один runnable для потока записи, который в бесконечном цикле принимает данные из очереди и сохраняет их. –
Я думал, что в моем втором примере я только создаю 1 runnable для фонового потока? Может быть, я не понимаю, что вы имеете в виду, но я думал, что 'executor.execute()' добавляет задачи в очередь, где каждая задача в очереди выполняет сохранение? – Simon
Да, вы правильно поняли. Ваш второй пример будет работать, я полагаю, если вы правильно синхронизируете данные общего доступа (я имею в виду код, который вы опустили, где события из датчика хранятся в каком-либо объекте, а затем читаются автором). –