2011-01-23 6 views
3

私が知っている限り、各Android端末はすべてのアプリを最大16,24、または32Mbのメモリ使用量に制限しています。私はちょうど明らかに256MbのRAMを利用するようであるアプリのDungeon Defendersを議論する人々を見た。Androidアプリで256Mb以上のRAMを使用するにはどうすればよいですか?

アプリの説明:「最小要件:512 MBのRAM(実行時に256無料)」のカスタムROMが256MBのを取得する必要があるドロイド上で実行するには、このゲームを取得する方法について http://www.appbrain.com/app/dungeon-defenders%3A-first-wave/com.trendy.ddapp

ガイド( RAMは無料でゲームを実行できます): http://www.forums.trendyent.com/showthread.php?447-How-to-play-Dungeon-Defenders-on-your- Motorola-Droid-Milestone-(必須ルート)

これはどのように可能ですか?誰がここで何が起こっているのか知っていますか?このような多くのRAMにアクセスすると、私ははるかに簡単に書くことができる特定のプロジェクトを作成するので、このゲームが何をしているのか非常に興味があります。

答えて

1

ドイツのベルリンのdroidconでは、アプリケーションがdalvik側で使用できるRAMの量を増やせないと聞きました。ネイティブ側で使用可能なすべてのメモリを使用することができますので、名前付きアプリケーションがNDKを使用してCでネイティブメモリをネイティブで実装していると思います。それは私が知っている唯一の解決策です...

更新更新これは会議ではなく、私の大学のReto Meierと同僚とのGoogle Labの訪問でした。

+0

"ネイティブ側で使用可能なすべてのメモリを使用できます"。あなたはこれについて確信を持っていますか?たとえば、ビットマップオブジェクトを作成すると、Androidは使用している「ネイティブ」メモリの量を追跡します。これが真実ならば、メモリを割り当て、それをJavaに戻すNDK関数を書いて、これを悪用することはできませんか?アプリが使用可能なメモリをすべて使い果たしてシステムが不安定にならないようにするにはどうすればよいですか? – rbcc

+0

私はこれを試したことはありません(私はc/C++のコードを書くことはできません:/)ので、これは私が聞いたことだけです。私が正しく覚えていれば、それは会議ではなく、Reto Meierと彼の3人の友人を持つ私の大学のGoogle Labイベントであった。だから、私はこの情報がしっかりしていると思う。例を挙げて誰かがそれを証明することができれば、私はそれを見て非常にうれしいでしょう。 – WarrenFaith

+0

情報ありがとうございます。私はこれのためのコードを見ることに非常に興味があります。たとえば、私は現時点でJavaで2つの大規模なint配列(画像処理効果を行うために)を使用しています。どうにかしてCでこれらを割り当てることができれば、私のアプリのメモリ占有量を大幅に減らすことができます。 – rbcc

0

私が知っている限り、Androidは256MB以上のRAMを使用することができます。2.2
しかし、ほとんどの携帯電話は、システムには常に予約されているRAMがあります。

+0

Android 2.2を実行しているHTC Desireで24Mbを超えると「java.lang.OutOfMemoryError:ビットマップサイズがVM予算を超えています」というエラーが発生しました。あなたはあなたのポストに関するより多くの情報とリンクしていますか? – rbcc

+0

私はシステム全体を意味する!私はまた、1つのアプリがそんなに多くのRAMにアクセスできる方法も知らない。 – Beasly

0

私のアプリにNDKを使用しています。私のテストデバイスでは、16MB以上の制限(HTCマジック、アンドロイド2.2)をとると、アプリケーションがクラッシュし、無効なアドレスアクセスの例外がスローされます。 いいえ、ネイティブ側からもJava管理側からも、あなたが望むすべてのメモリを使用することはできません。

私はさまざまな.soライブラリを使用し、アプリケーションの実行時にそれらを読み込んでいますが、どのように動作するのか、実行可能な回避策がわかりません。助言がありますか?

+0

うーん、それは変です。 HTC Magicには288MbのRAMが搭載されているようです。あなたが16Mb以上を使用すると、より少ないRAMで構成されたエミュレータが私のためにクラッシュすることはありません。無効なアドレス例外は非常に奇妙に聞こえる。私はあなたがメモリの例外またはmallocによって返されたヌルを取得していると思っていたでしょう。 – rbcc

0

イメージをリアルタイムでレンダリングする必要がない場合、答えは簡単です。画像をサーバーに送信し、画像処理コマンドを使用してレンダリングし、Androidに送り返すだけです。アプリケーションに256MB以上のRAMが必要な場合は、多くの視聴者を厳しく制限することになりますが、それは良くありません。

+0

このソリューションは、帯域幅とCPUコストの余裕がある場合にのみ機能します。私のアプリは256MBのRAMを必要とせず、約30MBまたは40MB(一般的な制限よりも約30%)だけです。私はいくつかのテストをしましたが、危険なクラッシュなしにこれをかなり安全に使用できるようです。 – rbcc

関連する問題