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-15mb 内存。

我已经对菜单和游戏使用的所有位图进行了分组。这意味着我只在显示菜单时加载菜单位图,然后在加载新位图之前回收并删除旧位图的引用。

在加载过程中,我会检查剩余的内存百分比,如果百分比小于 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());        

正如您在活动中看到的,我只为内存超过 40mb 的设备展示广告。但是我在没有广告的项目中使用了大约 20mb。

我遇到的另一个问题是与其他应用程序共享内存的设备。就像他们的内存限制为 64 但仍在使用我的应用程序以外的其他地方的 40-50 一样。我可以以某种方式请求清除该内存吗?

我是不是做错了什么,因为这真的让我很紧张。我的意思是我看到应用程序同时使用 2-5 个广告..

我能以某种方式更好地管理这个吗?

4

0 回答 0