通过android中的活动与服务进行通信

时间:2014-12-28 13:35:00

标签: android android-service

我需要在活动和服务之间进行沟通。我有一个在后台运行的服务。

  • 当活动开始时,它将检查服务是否正在运行。
  • 如果没有运行,则活动将启动该服务。
  • 如果已经运行,则活动将请求服务以获取某些数据。

当我想要轮询方法时,我需要从服务获取更新数据。实际上在一段时间后我需要服务数据。

如何从服务中获取数据?

据我所知,可以通过绑定服务来完成。但是我不想绑定服务,因为我需要在活动不在焦点时运行服务。

2 个答案:

答案 0 :(得分:2)

使用BroadcastReceivers。 在活动中声明Broadcastreceiver:

public static final String ACTION_MY_ACTION = "com.example.test.MY_ACTION";

private BroadcastReceiver my_broadcast_receiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        //extract the data from intent here
        String data = intent.getStringExtra("my_key");
    }
}


@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    IntentFilter filter = new IntentFilter(ACTION_MY_ACTION);

    //we register the receiver
    registerReceiver(my_broadcast_receiver, filter);
}

@Override
protected void onDestroy()
{
    super.onDestroy();
    unregisterReceiver(my_broadcast_receiver);
}

在您希望将数据发送到活动时的服务中:

Intent i = new Intent(MyActivity.ACTION_MY_ACTION);
i.putExtra("my_key", "data");
sendBroadcast(i);

修改

如果担心其他应用可以拦截广播然后使用LocalBroadcastManager,并发送本地广播,这样您播放的数据就不会离开您的应用,所以不必担心泄露私人数据。

答案 1 :(得分:0)

我会尝试引导你朝着正确的方向前进。我的建议是从服务更新您的应用程序后台数据(如数据库,设置等)。我注意到的另一件事是您可能正在尝试更新视图以便您执行此操作。 This问题应该对如何从Service开始您的活动有所帮助。我不建议这样做。而是检查您的Activity是否正在运行并进行更新。找出如何做到这一点是一个简单的谷歌搜索。