2014-09-03 2 views
0

В моем приложении активность A соединяется с базой данных сервера, сохраняя широту и долготу из разных городов, а активность B соединяется с подсказками карт Google, вычисляя расстояния между городами. Результаты показаны через адаптер списка.AsyncTask или темы

  1. Потому что есть несколько расстояний, которые нужно рассчитать каждый раз (20-30), что является самым быстрым способом достижения этого; Использование много раз AsyncTask или использование потоков;

  2. Должен ли я объединить эти два вида деятельности, чтобы ускорить работу; (Но тогда, я сталкиваюсь с проблемами, потому что FragmentActivity, расширяющий класс активность B не поддерживает адаптер

    FAQ по

Благодарности

+0

Вы знаете, что AsyncTask использует потоки правильно? – Simas

+0

Я не знаком с темами. Вот почему я спрашиваю – user3649152

+0

Существует только два способа выполнения параллельной команды: один использует Process, а другой использует Thread. Я рекомендую вам прочитать [эту статью.] (Http://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html) – Paulo

ответ

0

1) Многопоточность

лично мне нравится AsyncTasks, потому что они чистый способ обработки многопоточности. (Обратите внимание, что AsyncTasks работают на отдельных потоках в части doInBackground())

Однако, если вы считаете, что рабочая нагрузка слишком интенсивна для AsyncTask, чем руководство разработчика Android рекомендует использовать вместо этого службу фона.

Мне кажется, что вы можете выполнить последовательность из двух асинтактов: первая захватывает значения lat/long с сервера в doInBackground(). В первом onPostExecute() вы можете запустить второй, указав ему значения сервера. Второй может затем вычислить расстояние в методе doInBackground().

2) Деятельность и ListAdapter

Объединить оба вида деятельности в одно точно. Несмотря на то, FragmentActivity, очевидно, не может быть ListActivity, вы можете вытащить ListView из XML с

ListView list = (ListView) findViewById(R.id.list); 

Или программно создать представление списка с

ListView list = new ListView(this); 

Тогда вы можете создать экземпляр любого типа адаптера класс, который вы хотите, и установите его в ListView. Следующий пример показывает это с помощью CursorAdapter, но это будет работать с любым адаптером, обычаем или встроенным в.

CursorAdapter dataAdapter = new SimpleCursorAdapter(
      getActivity(), R.layout.list_spot, 
      cursor, 
      columns, 
      to, 
      0); 

    list.setAdapter(dataAdapter); 

Надеется, что это помогает!

+0

человеку, который проголосовал за это, не задумывайтесь, почему для всяких целей –

+0

Thanks Jonathan – user3649152

+0

Без проблем, рад помочь. –

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