我将在Android应用程序中拥有以下层的结构。与接口层的SDK通信,在某些情况下它是阻塞的,在某些情况下它是非阻塞的。 SDK在请求 - 响应的基础上工作,每个请求都有相应的响应。
+------------+ +-----------+ +-----------+
| Activity 1 | |Activity 2 | |Activity 3 |
+------------+ +-----------+ +-----------+
| | |
+-------------------------------------------+
| Interface |
+-------------------------------------------+
|
+-------------------------------------------+
| SDK |
+-------------------------------------------+
在上面的层中,接口是提供与各种活动的SDK API通信的接口的媒介。
如何实现接口,可以从中访问它 所有活动,并从任何活动调用来调用SDK API,它还仅提供对呼叫活动的响应 (同步或异步)。
当应用程序不是时,接口如何保持活动状态 活动或在后台(服务未提供),以便它可以从SDK获得通知。
如何从SDK接收广播通知 所有可用的活动(广播接收机制是可以的 此?)?
实施此功能的最佳做法是什么?
我曾想过将Interface作为Singleton类提供调用SDK API的函数,但是那些异步的API又需要花时间执行的API呢?
答案 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
来广播该应用的本地事件。还有一些“总线”实现,例如EventBus
和Otto
,可以帮助将事件从一个对象发送到另一个对象,而不需要彼此直接引用。
如果您正在寻找整体异步架构提示,您可以探索如何实现名为RoboSpice
的框架。