2015-05-04 61 views
-1

我已经声明了一个名为Android:如何更新由A类实现的接口方法并从B类更新?

public interface listener { 
    public void onError(); 
} 

实现了这个接口在类A. 我有我通过startService(new Intent(this, B.class));

现在打开欲望,使用接口时,我收到另一个服务B的接口B类中的任何错误都可以在不使用广播的情况下通知给A类?

回答

1

如果您的ActivityAServiceB处于相同的过程中,您可以使用bindService(Intent intent, ServiceConnection conn, int flags)而不是startService来启动服务。而conn将是一个内部类就像:

private ServiceConnection conn = new ServiceConnection() { 

    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     mMyService = ((ServiceB.MyBinder) service).getService(); 
     mMyService.setListener(new Listener() { 
      @Override 
      public void onError() { 
       // ... 
      } 
     }); 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     mMyService = null; 
    } 
}; 

mMyService是你ServiceB的实例。

ServiceB,只是覆盖onBind

public IBinder onBind(Intent intent) { 
    return new MyBinder(); 
} 

ServiceB添加下面的类:

public class MyBinder extends Binder { 
    public ServiceB getService() { 
     return ServiceB.this; 
    } 
} 
除了

,添加一个公共方法:

public void setListener(Listener listener) { 
    this.mListener = listener; 
} 

所以你可以在012中通知,如:

someMethod(){ 
    // ... 
    mListener.onError(); 
} 

PS:bindService将是这样的:

this.bindService(intent, conn, Context.BIND_AUTO_CREATE);

,不要忘记

protected void onDestroy() { 
    this.unbindService(conn); 
    super.onDestroy(); 
} 

希望它能帮助。

+0

嗨Euporie,绑定服务的情况下,onStartCommand()没有被调用? – Pankaj

+0

@Pankaj绑定服务不会触发onStartCommand,它会调用onBind – Euporie

相关问题