2016-12-28 68 views
0

我有一个这样的接口:我可以将接口传递给android中的服务吗?

public interface MyInterface { 
    public void aMethod(); 
} 

我的自定义活动:

public class MyObject extends Activity { 

    private Context context; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      start(5,MyInterface handle); 
    } 
    public void start(final int duration, MyInterface handle){ 
    Intent intent = new Intent(getApplicationContext(),myService.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      Bundle bundle = new Bundle(); 
      //Eroor !*** i can't pass handle.aMethod() to my service *** 
      bundle.putSerializable("handle",bundle.getSerializable(handle.aMethod())); 
      intent.putExtras(bundle); 
      startService(intent); 
    } 
} 

我有一个服务:

public class myService extends Service { 
} 

我想实现我的接口方法,在我服务。我的活动传递接口方法来服务并启动它。

我无法将handle.aMethod()传递给我的服务。

如何将接口传递给活动方法中的服务?

+0

为什么你想通过'接口到服务'? –

+0

你应该到这个http://stackoverflow.com/questions/28611527/passing-data-from-activity-to-service-through-interface –

+0

好像你要拨打的服务接口方法? –

回答

1

这不能工作。因为getSerializable()保存对象的字段不包括对象的“ID”。所以当你的服务收到对象时,这两个对象是不相等的。它们在JVM中不是同一个对象,尽管它们有相同的领域。

您可以使用AIDL来解决此问题。 使用bindService()获取服务联编程序,并将AIDL接口传递给服务。

https://developer.android.google.cn/reference/android/os/Binder.html

0

,嘿,你要实现你的服务你定义的接口方法,所以你可以使用implements关键词希望。这样

public class myService extends Service implements MyInterface { 
} 

它会问你重写接口的方法,在你的服务,你可以用它在你的服务 让我知道,如果有任何混淆。

相关问题