1

プロジェクトでいくつかの主要なメモリの問題が発生しています。あなたが私にアドバイスを投げてくれたら、それは本当に役に立ちます..私は私の全体の使用法を説明しようとします.

メイン アクティビティでは、最初に AdMob バナーを設定します。大量のメモリを使用しているようです。これは私の onCreate メソッド全体です:

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    mGameView = new GameView(this, getAssets());

    ActivityManager am = ((ActivityManager)getSystemService(Activity.ACTIVITY_SERVICE));
    mGameView.setMemoryLimit(am.getMemoryClass());        

    mLayout = new RelativeLayout(this);
    mLayout.addView(mGameView);        

    if(mGameView.getMemoryLimit() > 40 && !mGameView.isFullVersion())
    {
        mAdView = new AdView(mThis, AdSize.BANNER, "xxxx");
        mAdRequest = new AdRequest();
        mAdView.loadAd(mAdRequest);
        mAdRequest = null;

        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
        mAdView.setLayoutParams(lp);                
        mLayout.addView(mAdView);           
    }

    setContentView(mLayout);

    hideBannerAd();
}

私がよくグーグルで調べたように、AdMob コードはメモリ リークを起こしているように見えるので、アプリの存続期間中ずっとそれを維持し、読み込み中の画面にのみ表示するようにしています。

この時点で、私はおそらく 10 ~ 15 MB のメモリを ADS 用に使用しています。

メニューとゲームプレイで使用されるすべてのビットマップをグループ化しました。つまり、メニューを表示するときにのみメニュー ビットマップをロードし、新しいビットマップをロードする前に古いビットマップの参照をリサイクルして削除します。

読み込みプロセス中に、メモリの残りの割合を確認し、割合が 90% 未満の場合にのみビットマップの読み込みを続行します。

次の方法でメモリの割合を計算します。

Debug.getMemoryInfo(memoryInfo);
percent = (float) (memoryInfo.getTotalPss() / 1024.0) / (float) mGameView.getMemoryLimit() * 100;

tge memoryLimit は、前述のアクティビティに由来します。

ActivityManager am = ((ActivityManager)getSystemService(Activity.ACTIVITY_SERVICE));
mGameView.setMemoryLimit(am.getMemoryClass());        

アクティビティで見たように、40 MB を超えるメモリを搭載したデバイスの広告のみを表示しています。しかし、私はADSなしのプロジェクトに約20MBを使用しています。

私が遭遇したもう 1 つの問題は、他のアプリケーションとメモリを共有するデバイスに関するものです。彼らのメモリ制限が64であるが、私のアプリ以外の場所からまだ40-50のように使用している場合のように。どういうわけかそのメモリをクリアするように要求できますか?

これは本当に私の神経質になっているので、私は何か間違ったことをしていますか. 同時に 2 ~ 5 個の広告を使用しているアプリを見たことがあります。

どうにかしてこれをうまく管理できますか?

4

0 に答える 0