0

私のアプリでは、ローカル データの保存に 3 つのファイルを使用します。そのうちの 2 つは、アプリの起動時にチェックされ、リモートで更新されます (新しいバージョンが利用可能であるか、ファイルがまだ存在しない場合)。3 つ目は、アプリの実行中に定期的に保存できるユーザー データ用です。

3 つすべてが同じ方法を使用してファイルを保存します。

    public boolean setLocalFile(String Filename, String FileText, Context con) {
    try {
        FileOutputStream fos = con.openFileOutput(Filename, Context.MODE_PRIVATE);
        fos.write(FileText.getBytes());
        fos.close();
        return true;
    } catch(Exception e) {
        handleError(e); // local method that simply does a System.out.println
        return false;
    }
}

これで、3 番目のファイルは正常に書き込まれますが、最初の 2 つのファイル (起動時にチェックされ、書き込まれる) はまったく書き込まれません。デバッグでは、setLocalFile メソッドが例外をスローしたりアプリをクラッシュさせたりせずに完全にスキップされたかのように表示され、報告される唯一のエラー ログは次のようになります。

07-11 16:14:13.162: ERROR/AndroidRuntime(1882): ERROR: thread attach failed
07-11 16:14:18.882: ERROR/gralloc(62): [unregister] handle 0x3bfe40 still locked (state=40000001)

残念ながら、これらに関連して、オンラインで役立つものは何も見つかりませんでした。

それは私を困惑させました-なぜこの特定のケースで書いていないのかわかりません. 何か案は?

4

1 に答える 1

0

遅れた更新...この問題が発生している場所にコードを与えることは、完全に調べるために実際にはすべてのコードが必要になると思われるため、おそらくあまり実用的ではありません。

私の変数名は大文字で始まりました。これは主に、他の言語で約10年後にJavaに戻ったばかりであるため、物事のスイングに戻るのに時間がかかりました。きれいではありませんが、それは違いを生んだでしょう。それでも、回答してくれてありがとう。

この問題の背景は、これらのファイルに保持されているデータをクラスオブジェクトとして処理することにしたことです。したがって、Draftsオブジェクトはすべてのドラフトドキュメントを保持し、クラスコンストラクターはgetLocalFileメソッドを呼び出してクラスにローカルに格納し、ファイルに再度書き込む前に、(さまざまなget / setタイプのメソッドを使用して)操作できるようにします。 'commit'メソッドを使用します(setLocalFileを呼び出します)。

このようなさまざまなクラスオブジェクトが呼び出されていましたが、データファイルごとに複数のオブジェクトがインスタンス化されることはありませんでした。私を困惑させたのは、FS操作が単に無視されていたことを除いて、すべてが正常に機能していたことでした。ファイルに直接アクセスすると(作成したクラスラッパーを無視して)、問題は解消されました。

クラスラッパーはアプリの他の部分で正常に機能し、この問題はアプリの1つの複雑でかなり集中的なセクションでのみ発生しました。

私が言ったように、私は長期間の不在の後にのみJavaに戻っています(そして多くが変更されています)が、問題とそれ自体がどのように「解決」したかを見ると、それは何らかの形のスレッド/メモリの問題だったと思います-基本的に、私はあまりにも多くのオブジェクトからFSにアクセスしていましたが、最終的にはもう再生したくないと判断しました。

私が言ったように、問題は解決されましたが、その解決策ではデータオブジェクトをよりエレガントにラップできなかったというバグがあります。誰かがこれの原因/解決策を提案するかもしれないなら、私は喜んでそれを試して報告します、さもなければこの応答は将来同様の問題を持つ誰かを助けるかもしれません-少なくともエレガントでない解決策を見つけるため...

于 2011-09-08T09:40:01.493 に答える