也许有一些类似我的问题,但经过长时间的搜索,我找不到任何问题!
我有一个对象(OntologyHandler),其中填充了一些 Activity 和 BroadcastReceiver 使用的 rdf 文件。这个 OntologyHandler 加载起来真的很重,当我启动 Activity 时并不重要,因为我有一个“请稍候”消息。
但是BroadcastReceiver是在手机有来电的时候启动的,所以一定要尽可能快的执行,而且加载OntologyHandler对象需要7/8秒的时间真的是很多时间。
因此,我想在启动手机后仅加载一次 OntologyHandler,并使其对 Activity 或 BroadcastReceiver 的每次访问都保持快速可用。
你能告诉我任何建议吗?
- - 编辑 - -
实际上,我所拥有的是:
本体处理程序:
public class OntologyHandler { private static OntologyHandler instance; private OntologyHandler() { //loadOntology() is the method that spend a lot of time to terminate. loadOntology(); } public synchronized static OntologyHandler getInstance() { if(instance == null) { instance = new OntologyHandler(); } return instance; } public synchronized static void setInstance(OntologyHandler inst) { instance = inst; } public synchronized static boolean isInstanceLoaded() { return instance != null; } private void loadOntology() { //load the rdf files... } }
首次加载 OntologyHandler 的 Service,由侦听
android.intent.action.MEDIA_MOUNTED
Intent 的 BroadcastReceiver 启动:public class OntologyPreLoaderService extends IntentService { private OntologyHandler handler; public OntologyPreLoaderService() { super(OntologyPreLoaderService.class.getName()); } @Override protected void onHandleIntent(Intent intent) { if (handler == null) { //I use a thread because the Process is executed in the main thread of the app, //so, if the user starts the Activity he has no black screen while loading Ontology, //but a "Please wait" message in an AlertDialog, dismissed when the Activity can access the //OntologyHandler.getInstance(); synchronized static method new Thread() { public void run() { handler = OntologyHandler.getInstance(); } }.start(); } else { OntologyHandler.setInstance(handler); } } }
Activity 和PHONE_STATE
Intent BroadcastReceiver 都调用这个服务来加载本体。问题是,在挂载 SD 卡后(在手机启动时),OntologyPreLoaderService
正确加载了本体,但是在完成onHandleIntent
方法时,应用程序进程终止,所以当 Activity 或手机 BroadcastReceiver 调用它时,handler
服务的字段总是null 并且服务必须再次重新加载本体。
但我希望,一旦加载,服务维护 OntologyHandler 实例,即使它结束工作并再次重新唤醒或类似的东西。
希望你能理解我。