Android从Activity到服务/引擎进行通信的最佳方式

时间:2012-08-24 08:40:45

标签: android android-service

我有一个需要启动活动的WallpaperEngine - 一个简单的选项菜单。

我需要该菜单选择的结果。从活动回到服务的最佳方式是什么,因为它没有引用服务,我不能做startActivityForResult。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用BindersServiceConnectionSerivceActivity相关联。

Activity

private YourService mService;

private ServiceConnection mConnection = new ServiceConnection() {       
    public void onServiceConnected(ComponentName name, IBinder service) {
        mService = ((YourBinder)service).getService();
    }

    public void onServiceDisconnected(ComponentName name) {
        mService = null;
    }
};

@Override
protected void onResume() {
    bindService(new Intent(this, YourService.class), mConnection, Context.BIND_AUTO_CREATE);
    super.onResume();
}

@Override
protected void onPause() {
    if(mConnection != null){
        unbindService(mConnection);
    }   
    super.onPause();
}

您的Binder

public class YourBinder extends Binder {
    private WeakReference<YourService> mService;

    public YourBinder(YourService service){
        mService = new WeakReference<YourService>(service)
    }

    public YourService getService(){
        return mService.get();
    }
}

Service

@Override
public IBinder onBind(Intent intent) {
    return new YourBinder(this);
}

在此之后,您可以从Service调用Activity的公开方法。请注意,绑定是异步的。当您可以与Activity的用户界面进行互动时,已建立连接,但在onCreate()onResume()方法中,您的Service对象可能仍为空

答案 1 :(得分:0)

在这里查看教程: http://www.ozdroid.com/#!BLOG/2010/12/19/How_to_make_a_local_Service_and_bind_to_it_in_Android

您将要做的是将您的活动绑定到服务,这将为活动提供参考,并能够对服务进行任何操作。 (本教程介绍如何从活动中启动服务,但当然不需要这样做)