在Application Object中创建一个线程

时间:2010-11-10 13:32:36

标签: android thread-safety

我有一个应用程序,它从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
                       */

        }
}

上述方法是否可以安全使用? 即在应用程序类中创建线程来做一些后台处理是好办法还是坏办法? 它是否会降低应用程序启动速度? 创建这样的线程从Sdcard读取内容并为内部缓存分配一些内存是否安全?

2 个答案:

答案 0 :(得分:1)

在启动线程以执行长时间运行操作时,我没有看到任何问题。应用程序类是任何一个好地方。 您也可以使用Android的AsyncTask类。它可以使您的工作更轻松: http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:0)

这取决于您的应用程序的功能。如果它只涉及活动,那么它应该没问题,但不推荐(尽管你可能已阅读过)。如果您的应用程序有服务或广播接收器,那么您的应用程序将根据需要创建,并将启动缓存线程等。考虑创建一个单例类作为您的应用程序的一部分,其中有静态初始化程序,可以做你想要的启动。这使Application类保持干净。您还可以考虑使用对单例类的方法调用来初始化缓存,并在需要它的活动的onCreate()的最开头调用它。我打赌你的缓存设置得足够快。