1

私はfragment7ページを作成するメインを持っいます. 私は多くのページを処理するために使用しています。each pagesnavigation drawergridviewFragmentStatePagerAdapter

gPager.get().setOffscreenPageLimit(gABar.get().getTabCount());

MAT (メモリ分析ツール) を調べると、割り当てられたメモリHeap内のタブが、ナビゲーション中にサイズDDMSと同様に増加し続けます (これは向きの変更なしです)。heapナビしながら入れてみSystem.gc()たのですが、ラグが発生するので外します。(弱いおよびソフト)参照ビューホルダーパターン、および漏れcontextを処理することにより、コードを既に最適化しました。クリックしcause system gcても、割り当てられたメモリは減りません。

以下のコードでOOMが発生する可能性はありますか? つまり、4 つのページで同じフラグメントをインスタンス化したということです。MainGroupFragment- ドロワー レイアウトを処理し、「グリッドビュー表示」を処理する別のフラグメントも呼び出します。OOM を引き起こさない、またはメモリを節約するようにインスタンス化する効率的な方法はありますか?

@Override public Parcelable saveState() { return null; }

@Override
public void destroyItem(View collection, int position, Object o) {
    Log.i("destroyItem", "MyFragmentPagerAdapter destroyItem");
    View view = (View)o;
    ((ViewPager) collection).removeView(view);
    view = null;

}

 @Override
    public Fragment getItem(int arg0) {
        SavePref saveState = new SavePref(mContext.get());

        switch(arg0){
            /** Android tab is selected */
            case 0:
                //Bundle b = new Bundle();
                MainGroupFragment ItemID1 = new MainGroupFragment();
                ItemID1.variableAssigned("ItemID", mContext.get());
                ItemID1.saveSelecteditem("ItemID", 
                        ItemID1.selectedMainGroup.toString());
                //banquet.setRetainInstance(true);
                Log.i("#Inside MyFragmentPagerAdapter", "ItemID Value: " + 
                        ItemID1.selectedMainGroup.toString());
                //b.putCharSequence("mainGroup", "ItemID");
                //banquet.setArguments(b);
                return ItemID1;

            case 1:

                MainGroupFragment ItemID2 = new MainGroupFragment();
                ItemID2.variableAssigned("ItemID", mContext.get());
                saveState.saveSelecteditem("ItemID", 
                        ItemID2.selectedMainGroup.toString());
                //beverages.setRetainInstance(true);
                Log.i("#Inside MyFragmentPagerAdapter", "ItemID Value: " + 
                        ItemID2.selectedMainGroup.toString());

                return ItemID2;

            case 2:

                MainGroupFragment ItemID3 = new MainGroupFragment();
                ItemID3.variableAssigned("ItemID",  mContext.get());
                saveState.saveSelecteditem("ItemID", 
                        ItemID3.selectedMainGroup.toString());
                //food.setRetainInstance(true);
                Log.i("#Inside MyFragmentPagerAdapter", "ItemID Value: " + 
                        ItemID3.selectedMainGroup.toString());

                return ItemID3;

            case 3:

                MainGroupFragment ItemID4 = new MainGroupFragment();
                ItemID4.variableAssigned("OTHERS", mContext.get());
                saveState.saveSelecteditem("OTHERS", 
                        ItemID4.selectedMainGroup.toString());
                //others.setRetainInstance(true);
                Log.i("#Inside MyFragmentPagerAdapter", "OTHERS Value: " + 
                        ItemID4.selectedMainGroup.toString());

                return ItemID4;

            case 4: 
                HistoryFragment ItemID5 = new HistoryFragment();
                return ItemID5;

            case 5:
                OrdersFragment ItemID6 = new OrdersFragment();
                return ItemID6;

            case 6:
                FavoritesFragment ItemID7 = new FavoritesFragment();
                return ItemID7;


            default:
                //Bundle b2 = new Bundle();
                MainGroupFragment ItemID8 = new MainGroupFragment();
                ItemID8.variableAssigned("ItemID", mContext.get());
                saveState.saveSelecteditem("ItemID", 
                        ItemID8.selectedMainGroup.toString());

                return ItemID8;

        }

    }

MATによると容疑者1のみ。

One instance of "android.support.v4.app.FragmentManagerImpl" loaded by 

"dalvik.system.PathClassLoader @ 0x4123f038" occupies 32,500,328 (70.23%) bytes. The memory is 

accumulated in one instance of "android.support.v4.app.FragmentManagerImpl" loaded by 

"dalvik.system.PathClassLoader @ 0x4123f038".

Keywords
android.support.v4.app.FragmentManagerImpl
dalvik.system.PathClassLoader @ 0x4123f038

これはどういう意味ですか:

The FragmentManager seems to keep every Fragment forever. Make sure you destroy Fragments when you're done with them, simply detaching doesn't remove them from the manager.

アップデート:

これは役に立ちますか?

  @Override
    public int getItemPosition(Object object){
        return PagerAdapter.POSITION_NONE;
    }
4

0 に答える 0