我有一个Object(OntologyHandler),它填充了一些由Activity和BroadcastReceiver使用的rdf文件。 这个OntologyHandler负载非常重,当我启动Activity时无关紧要,因为我有一个“Please Wait”消息。
但是当手机上有来电时,BroadcastReceiver会启动,所以它必须尽可能快地执行,加载OntologyHandler对象所需的7/8秒实际上是很多时间。
所以我想在启动手机后加载OntologyHandler一次,并且对于Activity或BroadcastReceiver的每次访问都保持快速可用。
你能告诉我任何建议吗?
---编辑---
实际上,我所拥有的是:
OntologyHandler:
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的服务,由侦听android.intent.action.MEDIA_MOUNTED
意图的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都会调用此服务来加载Ontology。
问题是,在安装SD卡后(在电话启动时),OntologyPreLoaderService
正确加载Ontology但是,当完成onHandleIntent
方法时,应用程序进程终止,因此当活动或电话BroadcastReceiver时调用它,服务的handler
字段始终为null,服务必须重新加载Ontology。
但我想要的是,一旦加载,服务就会维护OntologyHandler实例,即使它结束了它的工作并再次重新唤醒或类似的东西。
希望你理解我。
答案 0 :(得分:0)
您可以实现将OntologyHandler
加载为手机启动时启动的Service
的部分,这样可以将数据保存在内存中,以便在需要时使用应用的其他部分。
然而,保持大量的内存捆绑起来必然会导致问题。您是否可以重新评估您的应用程序,看看您是否可以用其他方式表示RDF文件中的数据,因此可以根据需要将它们加载到较小的部分?
了解您的应用程序要实现的目标会很有帮助。当特定患者打电话给医生的智能手机时,目标是显示患者的医疗档案吗?