I have an Application which, reads files from Sdcard and does some intense processing.
To speed up the user e开发者_如何学运维xperience
I created a subclass of Application object. With in this i created a Thread where, i actually got a reference to the files on Sdcard and did the startup activities so that once the activity is shown there is no lag to the user.
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
*/
}
}
Is the above mentioned approach safe to use? i.e. creating thread in the application class to do some background processing is good approach or bad? Does it slow down application startUp? Is it safe to create a thread like this to read contents from Sdcard and allocate some memory for internal caching?
I don't see any problems in launching threads to do long running operations. Application class is as good place as any. You could also use Android's AsyncTask class. It could make your work easier: http://developer.android.com/reference/android/os/AsyncTask.html
It depends on what your application does. If it only involves activities, then it should be okay, but it's not recommended (in spite of what you may have read). If your application has services or broadcast receivers, then your application will be created as needed and will launch the caching thread, etc. Consider creating a singleton class as part of your application, in which there are static initializers that can do what you want at startup. That keeps the Application class clean. You could also consider using a method call to your singleton class to initialize the cache, and call that at the very beginning of the onCreate() of the activities that need it. I'm betting your cache would be setup quick enough.
精彩评论