Создание потока в объекте приложения - PullRequest
1 голос
/ 10 ноября 2010

У меня есть приложение, которое читает файлы с Sdcard и выполняет интенсивную обработку.

Для ускорения работы пользователя

Я создал подкласс объекта Application. В этом я создал тему, где я на самом деле получил ссылку на файлы на SDCard и выполнил действия при запуске, чтобы после показа активности пользователь не задерживался.

public class GAppClass extends Application {

    class setMapDirThread extends Thread {

       public void run() {  
    setMapDir();
       }
   }


  public void onCreate() {

                 setMapDirThread objThread = new setMapDirThread();
         objThread.start();

       }

 private void setMapDir() {

   Log.d(TAG, "Inside initMapComponent");
   String extDirName = Environment.getExternalStorageDirectory()
   .getAbsolutePath();
                       /*
                       some processing related to opening and reading files from Sdcard and 
                       allocating cache
                       */

        }
}

Безопасен ли вышеуказанный подход? создание потока в классе приложения для некоторой фоновой обработки - это хороший подход или плохой? Замедляет ли запуск приложения? Безопасно ли создавать такой поток для чтения содержимого из SDCard и выделения памяти для внутреннего кэширования?

Ответы [ 2 ]

1 голос
/ 10 ноября 2010

Я не вижу проблем при запуске потоков для выполнения длительных операций. Класс приложения так же хорош, как и любой другой. Вы также можете использовать класс AsyncTask для Android. Это может облегчить вашу работу: http://developer.android.com/reference/android/os/AsyncTask.html

0 голосов
/ 10 ноября 2010

Это зависит от того, что делает ваше приложение. Если это включает только действия, тогда все должно быть хорошо, но это не рекомендуется (несмотря на то, что вы, возможно, прочитали). Если у вашего приложения есть службы или широковещательные приемники, то ваше приложение будет создано по мере необходимости и запустит поток кэширования и т. Д. Рассмотрите возможность создания одноэлементного класса как части вашего приложения, в котором есть статические инициализаторы, которые могут делать то, что вы хотите, в запускать. Это поддерживает класс Application в чистоте. Вы также можете рассмотреть возможность вызова метода для вашего одноэлементного класса для инициализации кэша и вызова его в самом начале onCreate () тех операций, которые в этом нуждаются. Держу пари, ваш кеш будет настроен достаточно быстро.

...