1

をスワイプして、メモリ全体をいっぱいにこのように:FragmentStatePagerAdapterはちょうど私がこのようViewPagerを持っている私のAndroidアプリ内のページ

}

私が問題を抱えているのは、ViewPagerでフラグメントを前後にスワイプしていると、アプリケーションのメモリ使用量が増加し続けており、約128 MB(私がテストしている電話で)が完全に停止しているワーキング。

memory uses imcreasing

memory uses reasching 127.93 MB

私はすぐに断片をスワイプする以外に何もしていないのです。 フラグメントは複雑ではなく、画像またはビデオのいずれかしか含まれていません。現在、空のvideoJsonArrayでテストしているので、画像のみが表示されます。なぜ私はRAMの使用法がそんなに多く、なぜ彼らは増え続けているのか分かりません。

UPDATE:私は私の記憶がhogged保っているかを把握することができないよう

。ここに私のProductHeroImageFragmentは次のとおりです。ここ

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 

import com.bumptech.glide.Glide; 
import com.bumptech.glide.load.resource.drawable.GlideDrawable; 
import com.bumptech.glide.request.animation.GlideAnimation; 
import com.bumptech.glide.request.target.SimpleTarget; 
import com.ishan1608.utility.ColoredProgressBar; 
import com.weddingonclick.customer.R; 

import org.json.JSONArray; 

/** 
* Product hero image display fragment 
* Created by ishan on 22/1/16. 
*/ 
public class ProductHeroImageFragment extends Fragment { 

    private static final String IMAGE_URL = "IMAGE_URL"; 
    public static final String POSITION = "POSITION"; 
    public static final String IMAGES_ARRAY_STRING = "IMAGES_ARRAY_STRING"; 
    public static final String VIDEOS_ARRAY_STRING = "VIDEOS_ARRAY_STRING"; 
    private String imageUrl; 
    private int position; 
    private String imagesArrayString, videosArrayString; 

    public ProductHeroImageFragment() { 
     // Required Empty Constructor 
    } 

    /** 
    * Use this factory method to create a new instance of 
    * this fragment using the provided parameters. 
    * 
    * @param imageUrl Url of the image to be displayed 
    * @param position position in the image and video array 
    * @param imagesArray JSONArray for the images 
    * @param videosArray JSONArray for the videos 
    * @return A new instance of fragment ProductHeroImageFragment. 
    */ 
    public static ProductHeroImageFragment newInstance(String imageUrl, int position, JSONArray imagesArray, JSONArray videosArray) { 
     ProductHeroImageFragment fragment = new  ProductHeroImageFragment(); 
    Bundle args = new Bundle(); 
    args.putString(IMAGE_URL, imageUrl); 
    args.putInt(POSITION, position); 
    args.putString(IMAGES_ARRAY_STRING, imagesArray.toString()); 
    args.putString(VIDEOS_ARRAY_STRING, videosArray.toString()); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     this.imageUrl = getArguments().getString(IMAGE_URL); 
     this.position = getArguments().getInt(POSITION); 
     this.imagesArrayString = getArguments().getString(IMAGES_ARRAY_STRING); 
     this.videosArrayString = getArguments().getString(VIDEOS_ARRAY_STRING); 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    final View rootView = inflater.inflate(R.layout.fragment_product_hero_image, container, false); 
    final ColoredProgressBar loadingProgressBar = (ColoredProgressBar) rootView.findViewById(R.id.loading_progress_bar); 
    loadingProgressBar.setVisibility(View.VISIBLE); 
    final ImageView productHeroImageView = (ImageView) rootView.findViewById(R.id.product_hero_image_view); 
    Glide.with(getContext()) 
      .load(this.imageUrl) 
      .fitCenter() 
      .into(new SimpleTarget<GlideDrawable>() { 
       @Override 
       public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) { 
        loadingProgressBar.setVisibility(View.GONE); 
        productHeroImageView.setImageDrawable(resource); 
       } 
      }); 

    rootView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (!getActivity().getClass().equals(ProductHeroImageVideoActivity.class)) { 
       final Intent productHeroImageVideoIntent = new Intent(getActivity(), ProductHeroImageVideoActivity.class); 
       productHeroImageVideoIntent.putExtra(POSITION, position); 
       productHeroImageVideoIntent.putExtra(IMAGES_ARRAY_STRING, imagesArrayString); 
       productHeroImageVideoIntent.putExtra(VIDEOS_ARRAY_STRING, videosArrayString); 
       startActivity(productHeroImageVideoIntent); 
      } 
     } 
    }); 

    return rootView; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    Glide.get(getContext()).clearMemory(); 
} 
} 

がfragment_product_hero_image.xmlです:Doc 1として

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/pure_black"> 
<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/product_hero_image_view"/> 
<com.ishan1608.utility.ColoredProgressBar 
    android:layout_width="45dp" 
    android:layout_height="45dp" 
    android:layout_centerInParent="true" 
    android:id="@+id/loading_progress_bar"/> 
</RelativeLayout> 

答えて

0

、あなたはできるだけ低くページ制限を維持する必要があります。

this postから参照すると、私はシステムgcがすべてをリリースしないと信じています。複雑なレイアウトの場合は、メモリ解放のためにonDestroyを設定する必要があります。 This postがこれを手伝ってくれるかもしれません。

+0

質問に私のFragmentのコードを追加しました。メモリの問題がどこにあるのか教えてください。 – Ishan

+0

こんにちは、私は今グライドについて読んでいます。ですから、 'target.clear()'のようなAPIがあります。 'onDestroy'が呼び出されたときに使用できる' clearDrawables'オプションがあります。グライドは画像が消えても解除されませんのでご注意ください。 – cprakashagr

+0

ねえ、この投稿を見てください:https://github.com/bumptech/glide/issues/1062 – cprakashagr

関連する問題