2010-11-10 2 views
0

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

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

Я создал подкласс объекта Application. В этом я создал Thread, где я получил ссылку на файлы на 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 
         */ 

     } 
} 

Является ли вышеупомянутый подход безопасным в использовании? т. Е. Создание потока в классе приложения для выполнения некоторой фоновой обработки - хороший подход или плохой? Замедляет ли приложение startUp? Можно ли создать поток, подобный этому, для чтения содержимого с Sdcard и выделения некоторой памяти для внутреннего кэширования?

ответ

0

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

+0

У меня есть служба, которая создается сразу после получения BootComplete Intent. Таким образом, объект приложения будет создан во время загрузки. И сервис должен оставаться надолго, пока устройство не отключится. –

+0

На самом деле создание кеша и чтение файлов с Sdcard осуществляется путем вызова сторонней api, и это занимает огромное время около 3 секунд (я думаю, что он выполняет иную инициализацию тоже). Это время не является устойчивым во время активности startUp. –

+0

Что я намерен ускорить процесс инициализации, не задерживая время запуска приложения или активности, поэтому любые предложения? –

1

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

+0

Я не думаю, что мы можем создать AsyncTask в объекте Application, потому что это даст исключение, говорящее «Cant create Handler, который не вызвал Looper.prepare». –

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