我有IntentService
执行CRUD操作。当我的应用开始更新数据时,我启动IntentService
,当数据更新时,我需要启动显示数据的Activity
。
但正如我现在看到的那样,IntentService
在一个单独的进程中启动我的代码,在我的活动创建完成后完成,所以我有空活动。我能解决这个问题吗?或标准Service
是唯一的方法吗?
@Override
protected void onHandleIntent(Intent intent) {
Log.e("action",intent.getStringExtra(Utils.INTENT_SERVICE_INVOKE));
ResultReceiver resultReceiver = intent.getParcelableExtra(Utils.RECEIVER);
switch (intent.getStringExtra(Utils.INTENT_SERVICE_INVOKE)){
case Utils.LOAD_All_DATA:{
loadActivities();
loadPersons();
loadPictureData();
Log.e("order","forth");
resultReceiver.send(Utils.TASK_FINISHED,new Bundle());
// Intent broadcastIntent = new Intent();
// broadcastIntent.setAction(Utils.LOAD_All_DATA);
// sendBroadcast(broadcastIntent);
break;
}
case Utils.READ_ACTIONS_DATA:{
readActionData();
break;
}
case Utils.READ_PERSONS_DATA:{
readPersonsData();
break;
}
case Utils.READ_ACTION_BY_ID:{
readActionDataById(intent);
break;
}
}
}
答案 0 :(得分:1)
IntentService
不会在单独的进程中启动。它是一个常规Service
,添加了逻辑,将工作执行委托给单个后台线程,并在处理完所有传入的Intents
后停止服务。
您想要执行以下操作:
Activity
您的选择(从我的头脑中):
Service
。需要更新时启动此Service
,在更新完成时发送通知,并从Service
绑定Activity
以获取数据。IntentService
绑定也不与Activity
绑定的内存缓存。例如:实现DataManager
类并在Application
中实例化它。 IntentService
和Activity
都可以获得Application
的引用,因此他们可以获得对DataManager
对象的引用。 IntentService
会将数据写入其中,Activity
稍后会读取此数据以上三个选项中最简单的选项是#2。此外,如果你选择#2,那么如果出现这样的需求,将会相对容易地迁移到#3(这对于#34;数据繁重的应用程序来说是最好的。)