2014-09-28 4 views
0

В моем приложении у меня есть 6 Arrays, который следует обновлять каждый раз, когда начинается моя основная деятельность. Теперь все они обновлены главным потоком, и это приводит к ухудшению скорости моего приложения. Вот моя dbUpdate() функции:Параллельное выполнение функций в основном классе android

private void dbUpdate(){ 
     dateDB = getDateValues(); 
     valueDB = getValues(); 
     catDB = getCatValues(); 
     catIndexDB = getCatIndex(); 
     catExpenseDB = getCatExpense(); 
     catLimitDB = getCatLimits(); 
} 

Эти массивы не имеет зависимости от eath другой, и я хочу, чтобы обновить их 6 параллельного потоком. Я прочитал this статьи и попытался поместить каждый массив get функцию в Runnable:

Runnable run6 = new Runnable(){ 
     @Override 
     public void run(){ 
      catLimitDB = getCatLimits(); 
     } 
    }; 

Так что теперь у меня есть шесть Runnable и один Handler и я изменил мою dbUpdate() функции:

private void dbUpdate(){ 
     hand.post(run1); 
     hand.post(run2); 
     hand.post(run3); 
     hand.post(run4); 
     hand.post(run5); 
     hand.post(run6); 
} 

Но когда я бегу мое приложение не чувствую никакой разницы. Может кто-то помочь мне с этим? И я должен упомянуть, что это мой первый опыт программирования multithread.

+0

Ну, я не совсем уверен, но если вы ставите их на одного обработчика, все они будут в этой новой теме и займут столько же времени. Единственная разница в том, что они не связаны с потоком пользовательского интерфейса. Скажите мне, если я ошибаюсь, но я бы пошел на 6 разных потоков и посмотрел, помогает ли это – Yorrd

+0

, откуда берутся эти значения? – mmlooloo

+0

@Yorrd ok Я даю ему попробовать спасибо – A23149577

ответ

1

, если вы действительно хотите, чтобы запустить их в parrallel вы могли бы сделать что-то вроде этого:

new Thread(run1).start(); 
new Thread(run2).start(); 
new Thread(run3).start(); 
.. 

с handler.post вы добавляете свои рабочие места в очереди к hanler - и ваш обработчик может быть сконфигурирован для запустить в потоке пользовательского интерфейса - так что это может быть не то, что вы хотите.

+0

Ну, это кажется разумным и на самом деле теперь я чувствую некоторые отличия в своем приложении, но я столкнулся с новой проблемой, в этом случае иногда некоторые из моих массивов не обновляется, а остальная часть кода выполняется. Это приводит к исключению NullPointerException. Вы знаете, как я могу справиться с этим? – A23149577

+0

, который зависит от вашего кода и должен быть отдельным вопросом. если этот ответ решает вашу проблему, пожалуйста, примите его, чтобы этот вопрос был «закрыт» – ligi

+0

ok Спасибо за помощь – A23149577

Смежные вопросы