在onCreate中加载位图会使活动开始变慢

时间:2011-07-13 04:24:35

标签: java android bitmap

我是Android编程的新手,最近一直在学习开发一些应用程序。直到我遇到处理图像时才出现问题。我正在尝试开发一个简单的应用程序,更像是一本电子书,显示存储在drawable文件夹中的图片(JPEG / PNG)。

我的第一种方法是使用Gallery小部件,但我无法使用它实现适当的缩放。因此,我现在使用简单的Imageview一次显示一个位图,并在触摸事件上更改或缩放位图。为了做到这一点,我必须在活动启动期间将所有位图解码为位图数组,以便我可以随时使用它们。

我的应用程序在我的Galaxy Tab上开始正常,但每个手机除了大约需要3-5秒才启动。我只是想知道在启动时是否有一种简单的方法来加载位图。如果我的问题已被提出,请原谅我,但我搜索了stackoverflow很多,但无法找到我的问题的具体答案。这是我的代码。希望有人能提供帮助。

    package ....

    imports ....

    public class ImageViewFlipper extends Activity {

    private ViewFlipper viewFlipper;
    private Bitmap[] bMap= new Bitmap[15];
    private TextView currentpage;
    private ImageViewZoom iv;
    private imagenum=3;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    bMap[0] =BitmapFactory.decodeResource(getResources(), R.drawable.page);
    bMap[1] =BitmapFactory.decodeResource(getResources(), R.drawable.page1);
    bMap[2] =BitmapFactory.decodeResource(getResources(), R.drawable.page10);
    bMap[3] =BitmapFactory.decodeResource(getResources(), R.drawable.page11);
    bMap[4] =BitmapFactory.decodeResource(getResources(), R.drawable.page12);
    bMap[5] =BitmapFactory.decodeResource(getResources(), R.drawable.page13);
    bMap[6] =BitmapFactory.decodeResource(getResources(), R.drawable.page14);
    bMap[7] =BitmapFactory.decodeResource(getResources(), R.drawable.page2);
    bMap[8] =BitmapFactory.decodeResource(getResources(), R.drawable.page3);
    bMap[9] =BitmapFactory.decodeResource(getResources(), R.drawable.page4);
    bMap[10] =BitmapFactory.decodeResource(getResources(), R.drawable.page5);
    bMap[11] =BitmapFactory.decodeResource(getResources(), R.drawable.page6);
    bMap[12] =BitmapFactory.decodeResource(getResources(), R.drawable.page7);
    bMap[13] =BitmapFactory.decodeResource(getResources(), R.drawable.page8);
    bMap[14] =BitmapFactory.decodeResource(getResources(), R.drawable.page9);

    currentpage=(TextView)findViewById(R.id.textview);
    iv = (ImageViewZoom) findViewById(R.id.zero);
    iv.setImageBitmapReset( bMap[imagenum], 0, true );
    viewFlipper = (ViewFlipper) findViewById(R.id.flipper);
    ......

imagenum的值根据onFling方法而变化,ImageViewZoom是自定义的ImageView类。我希望这些信息足够。

3 个答案:

答案 0 :(得分:2)

我建议将所有位图加载移动到你在onCreate中开始的AsyncTask。设计您的活动,以便在加载所有图像之前显示合理的内容。 AsyncTask可以加载所有图像并在onPostExecute中传递,或者使用onProgressUpdate加载每个图像。

答案 1 :(得分:1)

为什么不尝试先加载2或3张图像,然后在后面加载其他图像?

答案 2 :(得分:0)

您还可以考虑在后台加载图片的服务。 http://developer.android.com/guide/topics/fundamentals/services.html