我正在尝试找出一种为我的服务提供首选项文件的好方法,例如活动的 SavedInstanceState。该服务启动,设置警报,并调用 stopSelf();,因为它可能需要几天才能再次运行,我希望它启动,完成它的任务,然后完成。我只是要在逗号分隔的文本文件中使用相同的一些键/值对。
好的,所以我想打开Context提供的FileInputStream,但是我必须处理异常。我宁愿先检查以确保文件存在以避免错误,如果返回大量文件,我想在 UI 线程上完成这项工作。这是我的代码:
public void setNewAlarm() {
Log.d("alarmServ", "inside setNewAlarm()");
FileInputStream fis;
Time time = new Time();
Boolean prefsAvail = false;
String[] fileList = fileList();
Runnable fileCheck = new Runnable() {
public void run() {
int i = 0;
while (i<fileList.length) {
if (fileList[i] == "preferences") {
prefsAvail = true;
break;
}
i++;
}
if (prefsAvail) {
try {
fis = openFileInput("preferences");
} catch (FileNotFoundException ioe) {
Log.d("alarmServ", "i/o error: output file fail");
ioe.printStackTrace();
}
}
}
};
//do something with the InputStream - read prefs and build alarm based on the criteria
}
那么问题显然是 FileInputStream、boolean 和 String[] 在 runnable 中不可用。我该如何解决这个问题,我的理解是嵌套类可以访问其容器的变量。这不是真的,因为它是在方法中声明的吗?
我尝试使用谷歌搜索,发现这样做的一种方法是将数据声明为最终数据,但这似乎不适用于布尔值或流。