我需要在活动和服务之间进行沟通。我有一个在后台运行的服务。
当我想要轮询方法时,我需要从服务获取更新数据。实际上在一段时间后我需要服务数据。
如何从服务中获取数据?
据我所知,可以通过绑定服务来完成。但是我不想绑定服务,因为我需要在活动不在焦点时运行服务。
答案 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是否正在运行并进行更新。找出如何做到这一点是一个简单的谷歌搜索。