アクティビティの SavedInstanceState のように、サービスに設定ファイルを与える良い方法を見つけようとしています。このサービスが開始され、アラームが設定され、stopSelf(); が呼び出されます。これが再び実行されるまでには数日かかる可能性があるため、開始してタスクを実行し、完了させたいと考えています。コンマ区切りのテキスト ファイルにいくつかのキーと値のペアを同じにします。
OK、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 内で使用できないことです。これを回避するにはどうすればよいですか。私の理解では、ネストされたクラスはコンテナーの変数にアクセスできるということでした。メソッド内で宣言されているため、これは真実ではありませんか?
グーグルを試してみたところ、これを行う1つの方法はデータを最終として宣言することであることがわかりましたが、これはブール値またはストリームには適切ではないようです.