图片内存溢出 开源TouchGallery使用

Jux-L 发布于 2014/05/05 16:38
阅读 577
收藏 0
有谁用过TouchGallery这个东西 ?为什么我去加载手机上的图片 根据图片加载一张图片没事 但是三张以上就内存溢出 
05-05 16:11:37.386: E/AndroidRuntime(27442): FATAL EXCEPTION: AsyncTask #2
05-05 16:11:37.386: E/AndroidRuntime(27442): java.lang.RuntimeException: An error occured while executing doInBackground()

05-05 16:11:37.386: E/AndroidRuntime(27442):  at android.os.AsyncTask$3.done(AsyncTask.java:299)

05-05 16:11:37.386: E/AndroidRuntime(27442):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
05-05 16:11:37.386: E/AndroidRuntime(27442):  at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
05-05 16:11:37.386: E/AndroidRuntime(27442):  at java.util.concurrent.FutureTask.run(FutureTask.java:239)

05-05 16:11:37.386: E/AndroidRuntime(27442):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)

05-05 16:11:37.386: E/AndroidRuntime(27442):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-05 16:11:37.386: E/AndroidRuntime(27442):atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-05 
16:11:37.386: E/AndroidRuntime(27442):  at java.lang.Thread.run(Thread.java:838)
05-05 16:11:37.386: E/AndroidRuntime(27442): Caused by: java.lang.OutOfMemoryError

05-05 16:11:37.386: E/AndroidRuntime(27442):  at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
05-05 16:11:37.386: E/AndroidRuntime(27442):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:548)
05-05 16:11:37.386: E/AndroidRuntime(27442):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620)
05-05 16:11:37.386: E/AndroidRuntime(27442):  at ru.truba.touchgallery.TouchView.FileTouchImageView$ImageLoadTask.doInBackground(FileTouchImageView.java:66)
05-05 16:11:37.386: E/AndroidRuntime(27442):  at ru.truba.touchgallery.TouchView.UrlTouchImageView$ImageLoadTask.doInBackground(UrlTouchImageView.java:1)
05-05 16:11:37.386: E/AndroidRuntime(27442):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-05 16:11:37.386: E/AndroidRuntime(27442):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)

这是demo加载本地图片的activity
/*
 Copyright (c) 2012 Roman Truba

 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 documentation files (the "Software"), to deal in the Software without restriction, including without limitation
 the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
 permit persons to whom the Software is furnished to do so, subject to the following conditions:

 The above copyright notice and this permission notice shall be included in all copies or substantial
 portions of the Software.

 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
 THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package ru.truba.touchgallery;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
import ru.truba.touchgallery.GalleryWidget.FilePagerAdapter;
import ru.truba.touchgallery.GalleryWidget.GalleryViewPager;
import ru.truba.touchgallery.GalleryWidget.BasePagerAdapter.OnItemChangeListener;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class GalleryFileActivity extends Activity {

    private GalleryViewPager mViewPager;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        String[] urls = null;
        List<String> items = new ArrayList<String>();
try {
urls = getAssets().list("");

        for (String filename : urls) 
        {
         if (filename.matches(".+\\.jpg")) 
         {
         String path = getFilesDir() + "/" + filename;
         copy(getAssets().open(filename), new File(path) );
         items.add(path);
         }
        }
} catch (IOException e) {
e.printStackTrace();
}

        FilePagerAdapter pagerAdapter = new FilePagerAdapter(this, items);
        pagerAdapter.setOnItemChangeListener(new OnItemChangeListener()
{
@Override
public void onItemChange(int currentPosition)
{
Toast.makeText(GalleryFileActivity.this, "Current item is " + currentPosition, Toast.LENGTH_SHORT).show();
}
});
        
        mViewPager = (GalleryViewPager)findViewById(R.id.viewer);
        mViewPager.setOffscreenPageLimit(3);
        mViewPager.setAdapter(pagerAdapter);
    }
    public void copy(InputStream in, File dst) throws IOException {

        OutputStream out = new FileOutputStream(dst);

        // Transfer bytes from in to out
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }
}

这个是我自己的代码 :
public class Image extends Activity implements OnClickListener{

private GalleryViewPager mViewPager;
private Button btBack;
private Button btSend;
private List<String> list = new ArrayList<String>();
private FilePagerAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.image);
initViews();

}

private void initViews() {
// TODO Auto-generated method stub
list = getIntent().getStringArrayListExtra("path");
btBack = (Button) findViewById(R.id.image_btn_back);
btSend = (Button) findViewById(R.id.image_btn_commit);
mViewPager = (GalleryViewPager) findViewById(R.id.photoview);
adapter = new FilePagerAdapter(this, list);
//mViewPager.setOffscreenPageLimit(3);
mViewPager.setAdapter(adapter);
btBack.setOnClickListener(this);
btSend.setOnClickListener(this);

}

@Override
public void onClick(View v) {

switch (v.getId()) {
case R.id.image_btn_back:

break;
case R.id.image_btn_commit:

break;

}

}
}
加载中
返回顶部
顶部