をスワイプして、メモリ全体をいっぱいにこのように:FragmentStatePagerAdapterはちょうど私がこのようViewPagerを持っている私のAndroidアプリ内のページ
}
私が問題を抱えているのは、ViewPagerでフラグメントを前後にスワイプしていると、アプリケーションのメモリ使用量が増加し続けており、約128 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>
質問に私のFragmentのコードを追加しました。メモリの問題がどこにあるのか教えてください。 – Ishan
こんにちは、私は今グライドについて読んでいます。ですから、 'target.clear()'のようなAPIがあります。 'onDestroy'が呼び出されたときに使用できる' clearDrawables'オプションがあります。グライドは画像が消えても解除されませんのでご注意ください。 – cprakashagr
ねえ、この投稿を見てください:https://github.com/bumptech/glide/issues/1062 – cprakashagr