在服务及其活动之间共享数据

时间:2014-05-18 09:29:03

标签: android multithreading android-service

似乎在服务和活动之间交换数据的通常方式是通过处理程序或消息。但是,如果我正在进行活动并启动我在同一进程中实现的服务,为什么我不能只访问他们的共享数据,因为它们在相同的地址空间中运行?是否影响基本上有两个类(活动和服务)?如果没有,如何访问其他人的数据字段?

如果它们甚至在同一个线程(UI)中运行,则同步不再是问题,我只是想知道在这种情况下是否有更简单的方法在它们之间共享数据。感谢。

2 个答案:

答案 0 :(得分:1)

是的,在这种情况下有一种更简单的方法。 建立绑定后,您可以将IBinder转换为您的服务类型。

以下是来自的相关代码段 http://developer.android.com/reference/android/app/Service.html

private LocalService mBoundService;

private ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName className, IBinder service) {
        // This is called when the connection with the service has been
        // established, giving us the service object we can use to
        // interact with the service.  Because we have bound to a explicit
        // service that we know is running in our own process, we can
        // cast its IBinder to a concrete class and directly access it.
        mBoundService = ((LocalService.LocalBinder)service).getService();

        // Tell the user about this for our demo.
        Toast.makeText(Binding.this, R.string.local_service_connected,
                Toast.LENGTH_SHORT).show();
    }

答案 1 :(得分:0)

我认为发送意图应该有用。

Intent in = new Intent(youractivity.this,YourService.class); //在这里你可以使用val进行意图 // putExtra方法 startService(IN);

在此之后,您可以在服务中收到您从活动发送的价值。 我认为这与活动之间的相似:) 希望它有效。