0

也许有一些类似我的问题,但经过长时间的搜索,我找不到任何问题!

我有一个对象(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_MOUNTEDIntent 的 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_STATEIntent BroadcastReceiver 都调用这个服务来加载本体。问题是,在挂载 SD 卡后(在手机启动时),OntologyPreLoaderService正确加载了本体,但是在完成onHandleIntent方法时,应用程序进程终止,所以当 Activity 或手机 BroadcastReceiver 调用它时,handler服务的字段总是null 并且服务必须再次重新加载本体。

但我希望,一旦加载,服务维护 OntologyHandler 实例,即使它结束工作并再次重新唤醒或类似的东西。

希望你能理解我。

4

1 回答 1

0

您可以实现在手机启动时启动加载的部分,这会将数据保存在内存中,以供应用程序的其他部分在需要时使用OntologyHandlerService

但是,像这样保持大量内存绑定必然会导致问题。您能否重新评估您的应用程序,看看您是否可以用另一种方式表示 RDF 文件中的数据,以便可以在需要时以较小的部分加载它们?

了解您的应用程序要完成的任务会很有帮助。当特定患者呼叫医生的智能手机时,目标是显示患者的医疗文件吗?

于 2012-05-15T20:26:52.007 回答