フラクタルを使って55ページを表示する銀河タブのアプリケーションを作成しました。それらのほとんどはビットマップであり、残りは動的ページ(ドロワーブルを使用)です。私はアプリを起動すると約10MBを消費し、ページあたり2MBのように増加し続けます。ページ番号40に達すると、メモリ不足エラー(約55MB)でクラッシュします。メモリ不足問題... 10MBのメモリから始まるアプリケーション
私の主な活動とその断片のコードです。
package com.example.hscroll.demo;
import java.util.List;
import java.util.Vector;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.PagerAdapter;
import com.example.hscroll.library.imagezoom.ImageViewTouch;
public class MainAct extends FragmentActivity{
private PagerAdapter mPagerAdapter;
private CustomViewPager viewPager;
//public static int PAGE_NUMBER = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.viewpager_layout);
this.initialisePaging();
}
private void initialisePaging()
{
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));
fragments.add(Fragment.instantiate(this, FragmentSignupForm.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment3.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment4.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment5.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment6.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment7.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment8.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment9.class.getName()));
fragments.add(Fragment.instantiate(this, MainFragmentActivity.class.getName()));
fragments.add(Fragment.instantiate(this, FragmentQuestionaire.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment10.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment11.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment12.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment13.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment14.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment15.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment16.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment17.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment18.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment19.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment20.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment21.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment22.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment23.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment24.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment25.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment26.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment27.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment28.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment29.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment30.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment31.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment32.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment33.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment34.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment35.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment36.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment37.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment38.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment39.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment40.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment41.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment42.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment43.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment44.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment45.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment46.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment47.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment48.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment49.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment50.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment51.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment52.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment53.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment53.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment54.class.getName()));
this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(),fragments);
viewPager = (CustomViewPager)findViewById(R.id.viewpager);
viewPager.setAdapter(this.mPagerAdapter);
ImageViewTouch.customViewPager = viewPager;
}
}
断片 - -
package com.example.hscroll.demo;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import android.graphics.Bitmap;
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.LinearLayout;
import com.example.hscroll.library.imagezoom.ImageViewTouch;
public class Fragment2 extends Fragment{
ImageViewTouch imgview ;
LayoutInflater inflater;
FileInputStream in;
BufferedInputStream buf;
Bitmap bitmap;
private final String PATH = "/mnt/sdcard/Ideal Solar/Layout_1.png";
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance)
{
this.inflater = inflater;
if(container == null)return null;
container = (LinearLayout)inflater.inflate(R.layout.fragment0_layout, container, false);
imgview= (ImageViewTouch)container.findViewById(R.id.imageView1);
bitmap = SelectImageFunctions.selectImage(inflater.getContext(), PATH);
if(bitmap!=null)
imgview.setImageBitmapReset(bitmap, true);
return container;
}
@Override
public void onResume() {
if(bitmap == null)
{
bitmap = SelectImageFunctions.selectImage(inflater.getContext(), PATH);
}
super.onResume();
}
@Override
public void onDestroyView() {
bitmap.recycle();
bitmap = null;
super.onDestroyView();
}
}
私は、ズームを適用した画像/ページにスクロールするなどthisライブラリを使用しています。
おかげ
このトピックでは、多くの質問があります。ここに1つのリンクがありますhttp://stackoverflow.com/questions/5697760/android-out-of-memory-exception-when-creating-bitmap – kosa
これらのリンクはすべて、サーバからイメージを取得する際の問題ですが、私のイメージはsdにありますカード。 – Khushwant
違いはありません。あなたがそれらと連動するとき、彼らは彼らがどこにいるかにかかわらずメモリにロードされます。 – kosa