【问题标题】:can i pass interface to a service in android?我可以将接口传递给android中的服务吗?
【发布时间】:2016-12-28 05:59:43
【问题描述】:

我有一个这样的界面:

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() 传递给我的服务。

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

【问题讨论】:

  • 为什么要将`接口传递给服务`?
  • 好像要从服务调用接口方法??
  • @ρяσѕρєя K,我需要它!!
  • @Piyush Kukadiya 是的!我想在我的服务中实现接口方法

标签: android


【解决方案1】:

这行不通。因为 getSerializable() 保存对象的字段不包括对象的“ID”。所以当您的服务接收对象时,这两个对象不相等。它们在 JVM 中不是同一个对象,尽管它们具有相同的字段。

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

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

【讨论】:

    【解决方案2】:

    您可以尝试使用一些库吗?它将帮助您将数据从任何地方传递到任何地方。

    点赞EventBushttps://github.com/greenrobot/EventBus

    OTTOhttp://square.github.io/otto/

    希望有帮助

    【讨论】:

      【解决方案3】:

      嘿,你想在你的服务中实现你定义的接口方法,所以你可以使用 implements 关键字。像这样

       public class myService extends Service implements  MyInterface {
      }
      

      它将要求在您的服务中覆盖您的接口方法,您可以在您的服务中使用它 让我知道是否有任何困惑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-01
        • 2015-02-09
        • 2018-10-19
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多