0

Android(3.2)でapache felixとosgiアプリを実行しています。これはこれまでのところうまく機能していますが、アプリケーションにロードするデータのかなり大きなチャンク (osgi バンドル) があります。それに関する問題は、取得するデータの最大のチャンクをロードするときに

LinearAlloc が容量を超えました

エラーが発生したようです

LinearAlloc.c

\#define DEFAULT_MAX_LENGTH  (4*1024*1024)

 if (nextOffset > pHdr->mapLength) {
    /*
     * We don't have to abort here.  We could fall back on the system
     * malloc(), and have our "free" call figure out what to do.  Only
     * works if the users of these functions actually free everything
     * they allocate.
     */
    LOGE("LinearAlloc exceeded capacity, last=%d\n", (int) size);
    dvmAbort();
}

afaik 3.2/4.x では 8*1024*1024 でもありますが、それでもその制限に達しています。この問題の原因と、それを修正する方法について、より良い洞察を得たいと考えています。どんな助けでも大歓迎です。

4

1 に答える 1

0

これは、異常に複雑なインターフェース階層でトリガーされるDalvikの制限です。

http://code.google.com/p/android/issues/detail?id=22586

回避策のアイデアについては、詳細を参照してください。簡単な答えは、それほど複雑ではないさまざまなライブラリを使用してみることです。

修正がAndroidAOSPに統合されました。 https://android-review.googlesource.com/#/c/30900/

于 2012-03-20T11:26:44.080 に答える