实现活动与SDK之间接口的最佳方式[Android]

时间:2015-04-09 13:45:49

标签: java android

我将在Android应用程序中拥有以下层的结构。与接口层的SDK通信,在某些情况下它是阻塞的,在某些情况下它是非阻塞的。 SDK在请求 - 响应的基础上工作,每个请求都有相应的响应。

+------------+  +-----------+   +-----------+
| Activity 1 |  |Activity 2 |   |Activity 3 |
+------------+  +-----------+   +-----------+
       |              |              |
+-------------------------------------------+
|                Interface                  |
+-------------------------------------------+
                     |
+-------------------------------------------+
|                  SDK                      |
+-------------------------------------------+

在上面的层中,接口是提供与各种活动的SDK API通信的接口的媒介。

有以下问题:

  1. 如何实现接口,可以从中访问它 所有活动,并从任何活动调用来调用SDK API,它还仅提供对呼叫活动的响应 (同步或异步)。

  2. 当应用程序不是时,接口如何保持活动状态 活动或在后台(服务未提供),以便它可以从SDK获得通知。

  3. 如何从SDK接收广播通知 所有可用的活动(广播接收机制是可以的 此?)?

  4. 实施此功能的最佳做法是什么?

    我曾想过将Interface作为Singleton类提供调用SDK API的函数,但是那些异步的API又需要花时间执行的API呢?

1 个答案:

答案 0 :(得分:1)

  

如何实现接口,可以从中访问它   所有活动,并从任何活动调用来调用SDK   API ...

接口实例可以成为上下文单例(懒惰地实例化)。所以你可能有static getInstance(Context)来获得接口的实现。

或者您可以使用依赖注入框架(Roboguice,Dagger等),只需使用@Singleton等注释该类。如果您想动态切换相同接口的实现,这非常有用。

或者您可以使用自己的Application课程扩展App课程,在明文的<application>标记中提及相同内容。现在App类将成为应用程序范围的单例,并且可以一次性初始化并从其onCreate()方法公开全局对象。

  

..,并且它仅提供对呼叫活动的响应   (同步或异步)。

我建议坚持单一模式。此外,活动,碎片和视图等UI组件也面临被频繁销毁和重新创建的风险。因此,通知SDK不要回拨即将消失的UI是一项重大责任。

RequestHandle handle = mySDK.doSomeAsyncReqyest(myInputParameters, new Callback<Data>(){
   @Override
   public void onResult(Data d, Exception e){
      // handle results
   }
});

始终跟踪请求并记住:

handle.cancel();
  

当应用程序没有时,接口如何保持活动状态   活动或在后台(服务未提供),以便它可以得到   来自SDK的通知。

截至目前,配备启动接收器的“粘性”服务是唯一可以让android不会永久破坏应用程序后台进程的方法。即使这样,如果资源很少,该过程仍将停止,并在资源空闲时重新启动。

此服务可以在状态栏中发布通知(通过成为前台服务),从中可以再次将用户重定向到应用的特定部分。

  

如何从SDK接收所有接口广播通知   可用的活动(广播接收机制还可以吗?)?

Android提供LocalBroadcastManager来广播该应用的本地事件。还有一些“总线”实现,例如EventBusOtto,可以帮助将事件从一个对象发送到另一个对象,而不需要彼此直接引用。

如果您正在寻找整体异步架构提示,您可以探索如何实现名为RoboSpice的框架。