我正在开发一个 Android 数据输入应用程序,它将输入的数据保存到一个文件中。A Service
(我们称之为它)使用文件名启动,并加载和保存从用户访问FileIOService
的每个传递给它的数据。Activity
我正在努力使整个应用程序尽可能健壮,目前我觉得我需要特别注意每个应用程序Activity
和Service
. 以下是我可以看到的问题:
- 如果
Service
被系统杀死,它需要重新启动并打开它打开的文件:我可以使用START_REDELIVER_INTENT
. - 如果 an
Activity
被破坏,例如由于方向变化,它需要重新连接到Service
.
问题是,一旦 Activity 启动 Service,Service 还需要一段时间才能完成打开文件并为 I/O 请求做好准备。为了解决这个问题,在我的活动中,我有两个:
- 内部类子类化 ServiceConnection,其
onServiceConnected()
方法已完成 - 对 BroadcastReceiver 的匿名内部子类的私有引用,其
handleMessage()
方法已完成。当服务发出广播以指示它已完成打开其文件时,将调用此方法。
然后这两个方法setUpActivity()
都会调用一个从Service
. 这就是它开始变得丑陋的地方。因为onServiceConnected()
可能在文件准备好 I/O 之前运行,并且handleMessage()
可能在Service
未绑定到时被调用Activity
,所以我必须同时设置handleMessage()
并onServiceConnected()
设置稍后可以签入的布尔标志setUpActivity()
,如下所示:
if ((fileLoaded && serviceConnected))
{
//access the file data
}
正如我所说,这感觉丑陋和尴尬,并且依赖于设置额外的布尔变量。
还有另一个问题 - 如果我在返回我的应用程序时Activity
启动了一个外部应用程序,如相机应用程序,并且两者都可能已被破坏(尤其是在方向改变时)并且应用程序崩溃。Activity
Service
Activity
我的感觉是,我可能会遗漏一些整体模式,这些模式将定义每个模式Activity
应该如何与Service
.