你能解释一下IntentService是如何工作的

时间:2016-11-05 14:34:39

标签: android android-intent android-asynctask intentservice

我有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;
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

默认情况下,

IntentService不会在单独的进程中启动。它是一个常规Service,添加了逻辑,将工作执行委托给单个后台线程,并在处理完所有传入的Intents后停止服务。

您想要执行以下操作:

  1. 从网络服务器执行数据更新
  2. 更新完成后通知
  3. Activity
  4. 获取对更新数据的引用

    您的选择(从我的头脑中):

    1. 使用可以启动和绑定的标准android Service。需要更新时启动此Service,在更新完成时发送通知,并从Service绑定Activity以获取数据。
    2. 实现一些既不与IntentService绑定也不与Activity绑定的内存缓存。例如:实现DataManager类并在Application中实例化它。 IntentServiceActivity都可以获得Application的引用,因此他们可以获得对DataManager对象的引用。 IntentService会将数据写入其中,Activity稍后会读取此数据
    3. 实施数据缓存SQLite。这种方法与上面的#2非常相似,但数据不存储在内存中,而是写入SQLite数据库。
    4. 以上三个选项中最简单的选项是#2。此外,如果你选择#2,那么如果出现这样的需求,将会相对容易地迁移到#3(这对于#34;数据繁重的应用程序来说是最好的。)